gpt4 book ai didi

android - 发布到绑定(bind)到当前线程的处理程序

转载 作者:行者123 更新时间:2023-11-30 02:20:28 25 4
gpt4 key购买 nike

我有一个处理程序,mHandler , 绑定(bind)到主线程。 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 之前到达)?
  2. 此外,这些语句是否有可能永远不会作为 post(Runnable r) 运行?是一个异步调用,因此 onDestroy()将完成并且 Service会在Handler之前被系统杀死开始运行代码。

提前谢谢你。

最佳答案

  1. 由于 Service 并不意味着一个单独的线程,您的可运行对象将被发布到主 Looper 队列的末尾,所以是的,有可能是在您之前安排的消息/可运行程序。

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

关于android - 发布到绑定(bind)到当前线程的处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28618685/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com