为了账号安全,请及时绑定邮箱和手机立即绑定

Android基础:在UI线程中运行代码

Android基础:在UI线程中运行代码

皈依舞 2019-07-15 09:35:16
Android基础:在UI线程中运行代码从在UI线程中运行代码的角度来看,在以下方面有什么区别:MainActivity.this.runOnUiThread(new Runnable() {     public void run() {         Log.d("UI thread", "I am the UI thread");     }});或MainActivity.this.myView.post(new Runnable() {     public void run() {         Log.d("UI thread", "I am the UI thread");     }});和private class BackgroundTask extends AsyncTask<String, Void, Bitmap> {     protected void onPostExecute(Bitmap result) {         Log.d("UI thread", "I am the UI thread");     }}
查看完整描述

3 回答

?
倚天杖

TA贡献1828条经验 获得超3个赞

所有这些都不完全相同,尽管它们都会产生相同的净效果。

第一个和第二个的区别是如果你碰巧在……上面执行代码时的主应用程序线程,第一个(runOnUiThread())将执行Runnable马上。第二个(post())总是将Runnable在事件队列的末尾,即使您已经在主应用程序线程上。

第三个实例,假设您创建并执行BackgroundTask,将浪费大量时间从线程池中抓取线程,以执行默认的no-op。doInBackground(),在最终完成相当于post()..到目前为止,这是这三个国家中效率最低的。使用AsyncTask如果您在后台线程中确实有工作要做,而不仅仅是为了使用onPostExecute().


查看完整回答
反对 回复 2019-07-15
?
杨魅力

TA贡献1811条经验 获得超6个赞

它可以在没有任何参数的情况下在任何地方使用:

new Handler(Looper.getMainLooper()).post(new Runnable() {
    @Override
    public void run() {
        Log.d("UI thread", "I am the UI thread");
    }});


查看完整回答
反对 回复 2019-07-15
?
胡说叔叔

TA贡献1804条经验 获得超8个赞

还有第四种方法Handler

new Handler().post(new Runnable() {
    @Override
    public void run() {
        // Code here will run in UI thread
    }});


查看完整回答
反对 回复 2019-07-15
  • 3 回答
  • 0 关注
  • 1062 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信