什么是android产生新线程的最佳方式?

时间:2012-04-04 18:50:21

标签: android multithreading

来自基本的Java世界我知道有一种方法可以通过创建一个新的Runnable并将其传递给一个新的Thread并在其上调用start来生成一个线程。类似的东西:

Runnable r = new Runnable() {
   @Override
   public void run(){
   }
}

new Thread( r ).start()

现在加入Android世界,Android eco系统似乎提供了一些其他方法来生成线程。其中一个是Activity.runOnUiThread(用于在UI上完成的东西)和Handler.post(runnable)。

我想知道的是什么是Android产生新线程的最佳方式。我确实看到了很多案例,例如:

Handler handler = new Handler()
handler.post( r )

是否有充分的理由使用Handler生成线程而不是创建新的Thread旧方法?

感谢。 YEV

3 个答案:

答案 0 :(得分:2)

查看AysncTask framework。看起来这就是谷歌希望你处理线程的方式......虽然你可以使用标准的java线程。

答案 1 :(得分:1)

你演示过的处理程序实际上并没有产生新的线程。处理程序不是线程,而是IPC的一种手段,让一个线程告诉另一个线程运行代码。你仍然以同样的方式产生线程,但Handler帮助那些线程更好地沟通。

比如说,你有一个你在后台以通常的方式产生的线程:

Runnable r = new Runnable() {
   @Override
   public void run(){
   }
}

new Thread( r ).start()

它在后台运行进行处理,但它需要用它的进度更新UI,所以它回调到Activity:

onProgress(int progress) {
  // update UI
}

如果按原样运行该代码,它将引发异常,因为只允许UI线程更新UI。处理程序可以像这样解决这个问题:

public void onProgress(int results){     mHandler.post(新的UIUpdater(结果));   }

private class UIUpdater implements Runnable {
  UIUpdater(int results) {
    //construct whatever...
  }

  @Override
  public void run() {
    //Update UI
  }
}

或者,您可以通过AsyncTask框架让Android管理线程和处理程序

答案 2 :(得分:0)

处理程序不应该生成线程,而是要向{0}新任务生成UI线程。 IMO产生线程的方式是java方式,直接通过runnable或扩展线程。 android人员围绕Async任务包装了一个Executor,并公开了一些直接在UI线程中运行的方法,以及一个在后台运行任务的方法。