发布到处理程序绑定到当前线程

时间:2015-02-19 23:00:46

标签: android android-handler

我有一个Handler,mHandler,绑定到主线程。 mHandler位于Service。假设我现在从主线程发布RunnablemHandler,如下所示:

public class SomeService extends Service {
    // Handler is created on the main thread
    // (and hence it is tied to the main thread)
    private Handler mHandler = new Handler();

    @Override
    public void onDestroy() {
        // onDestroy runs on the main thread
        // Is the code in this Runnable processed right away?
        mHandler.post(new Runnable() {
            // (Some code statements that are to be run on the main thread)
            ...
        });
        super.onDestroy();
    }
}

我知道这个例子有点傻,因为Handler是不必要的。但是,这是这个问题的一个很好的例子。

现在我的问题是:

  1. Runnable中的代码语句是否会立即处理,因为发布Runnable的线程也是处理Runnable的线程?或者它的工作方式不同,因为Handler内部使用了MessageQueue,因此可能会Runnable张贴到Handler其他位置(在Runnable之前到达post(Runnable r) )?
  2. 此外,语句永远不会运行,因为onDestroy()是异步调用,因此Service将完成,Handler将在{{1}}之前被系统杀死{1}}可以运行代码。
  3. 提前谢谢。

1 个答案:

答案 0 :(得分:1)

  1. 由于Service并不意味着单独的线程,因此您的runnable将发布在主Looper队列的末尾,所以是的,可能会有消息/ runnables安排在你的之前。

  2. 同样,由于Service并不暗示不同的主题,因此调用onDestroy并不意味着Handler的主题已被终止。在此示例中,您将发布到主循环器,并且该线程处于活动状态,直到应用程序进程终止。