生成新线程的 android 首选方式是什么?



来自Java的基础世界,我知道有一种方法可以通过创建一个新的Runnable并将其传递给一个新线程并在其上调用start来生成线程

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

现在加入安卓世界,安卓生态系统似乎提供了一些其他方式来生成线程。其中之一是Activity.runOnUiThread(用于在UI上完成任务)和Handler.post(可运行)。

我想知道的是,Android更喜欢什么方式来生成新线程。我确实看到了很多案例,比如:

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

有没有充分的理由使用Handler来生成线程,而不是用旧的方式创建新的线程?

谢谢。Yev

查看AysncTask框架。这似乎就是谷歌希望你处理线程的方式。。。尽管您可以使用标准的java线程。

您演示的处理程序实际上并没有生成新线程。句柄不是线程,而是IPC的一种方式,让一个线程告诉另一个线程运行代码。您仍然可以用同样的老方法派生线程,但处理程序可以帮助这些线程更好地进行通信。

例如,你有一个线程,你以通常的方式在后台生成:

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个结果){mHandler.post(新的UIUpdater(结果));}

private class UIUpdater implements Runnable {
  UIUpdater(int results) {
    //construct whatever...
  }
  @Override
  public void run() {
    //Update UI
  }
}

或者,您可以让Android通过AsyncTask框架

为您管理线程和处理程序

处理程序不应该派生线程,而是将新任务post到UI线程。IMO生成线程的方式是java方式,直接通过可运行或扩展的线程。安卓团队在Async任务周围封装了一个Executor,并公开了一些直接在UI线程中运行的方法,以及一个在后台运行任务的方法。

最新更新