来自基本的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
答案 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线程中运行的方法,以及一个在后台运行任务的方法。