【发布时间】:2016-04-10 20:18:34
【问题描述】:
我已经阅读了很多关于这个主题的问题,但我找不到任何可以回答我非常简单的问题的直接答案:处理程序实际上是创建新线程还是只是为创建它们的同一线程创建一个处理程序从?在 Android 文档中,他们提到:
“每个 Handler 实例都与单个线程和该线程的消息队列相关联。当您创建一个新的 Handler 时,它会绑定到正在创建它的线程的线程/消息队列——从那时起,它会将消息和可运行对象传递到该消息队列,并在它们从消息队列中出来时执行它们。”
然后他们也在同一页面上提到:
“处理程序有两个主要用途:(1) 安排消息和可运行对象在未来某个时间点执行;(2) 将要在与您自己的线程不同的线程上执行的操作排入队列。 ”。
我不确定它们是否意味着 Handler 实际上创建了新线程,这些线程可以与创建它们的线程(例如,从 UI 线程)进行通信,或者如果创建了 Handler,它们允许不同的线程与 UI 线程通信来自 UI 线程?
例如,在我的 MainActivity 和 onCreate() 函数中,我这样做:
public class MainActivity extends ActionBarActivity {
private static final String TAG = "MyApp: " + MainActivity.class.getSimpleName();
private Handler mHandler;
private Runnable mRunnable = new Runnable() {
public void run() {
// do something
processData();
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.i(TAG, "onCreate");
mHandler = new Handler();
mHandler.post(mRunnable);
.....
我是否真的在这里创建了一个独立于 UI 线程的新线程,它将执行函数 (processData)?如果我没有创建一个新线程,那么我上面的代码和只调用函数(processData)而不需要创建一个处理程序有什么区别,如下所示:
public class MainActivity extends ActionBarActivity {
private static final String TAG = "MyApp: " + MainActivity.class.getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.i(TAG, "onCreate");
processData();
.....
非常感谢。
安马尔
【问题讨论】: