AsyncTask vs Activity.runOnUiThread()vs Handler.post()

时间:2015-11-04 20:24:56

标签: android asynchronous android-asynctask

我正在研究大型应用的代码。 UI中使用了3种异步模式,它们看起来都是等价的:

模式1,AsyncTask

new AsyncTask<X, Void, Z>() {  
    protected Boolean doInBackground(X... params) {  
        //background task  
    }  

    protected void onPostExecute(Z res) {  
        //UI callback  
    }  
}.execute();

模式2,Activity.runOnUiThread(Runnable)

new Thread() {  
    public void run() {  
        //background task  

        runOnUiThread(new Runnable() {  
            public void run() {  
                //UI callback  
            }  
        });  
    }  
}.start();

模式3,Handler.post(可运行)

new Thread() {  
    public void run() {  
        //background task  

        handler.post(new Runnable() {  
            public void run() {  
                //UI callback  
            }  
        });  
    }  
}.start();

问题:

  • 我缺少的3种模式之间有什么区别? (除了在具有后台优先级的预先存在的线程池上运行AsyncTask之外。)
  • 任何特定模式首选的情况?

1 个答案:

答案 0 :(得分:3)

他们都是明显或内部的Handler

调用AsyncTask#finish()

onPostExecute()是从Handler消息循环中调用的。

如果当前线程不是UI线程,则

runOnUiThread()Runnable发布到Handler。如果它是UI线程,则可以同步执行runnable - 这并不总是可取的。

直接使用Handler可以为您提供低级控制。

使用方法取决于您的具体要求。