4

我有一个使用广播接收器的警报,但我对线程有点困惑。我想让它在一个单独的线程上运行,这样它就不会导致对其他任何东西没有响应,但是在查看 Android 文档时,我仍然不知道是否只有一个主线程,或者每个应用程序都有它的自己的主线程。

例如,如果我的应用程序没有运行,那么如果每个应用程序都运行自己的主线程,那么在 BroadcastReceiver 中运行一个单独的线程又有什么意义,这意味着我不会影响用户的其他进程。由于我的没有运行,它没有做它的事情不会受到伤害。但相比之下,如果所有应用程序都有一个主线程,那么我需要将操作移至单独的线程。我希望我不是在问一个愚蠢的问题。我只是想彻底了解它。提前致谢。

4

3 回答 3

8

在浏览了 Android 开发者页面之后,我相信 BroadcastReceivers 在主 IO 线程上运行。

BroadcastReceivers 具有 goAsync 功能,它允许

将与之相关的工作转移到另一个线程的实现,以避免由于磁盘 IO 而导致主 UI 线程出现故障。

资源

于 2012-07-12T00:53:59.830 回答
2

android 的基本规则是,android 的所有组件都默认运行在主线程(UI 线程)中。

广播接收器是 android 的非常轻量级的组件,它必须在最多 10 秒内完成其功能(根据 android 文档)。

由于您想从接收器发出警报,我认为这不会对您的用户界面响应能力产生严重影响。所以实际上并不需要启动一个不同的线程来启动接收器的警报。

参考来自开发者 android

于 2013-12-03T10:58:03.200 回答
0

广播接收器在它所针对的应用程序下注册到它当前正在运行的系统。具体来说,它不会停止主线程上的任何内容,因为它是异步完成的。这个特定的消息是广播的,然后通过 IntentFilter 传递给注册的任何进程以监听该广播(如果它受到保护,它将需要许可或不可用)。

然而; 好的做法是当你收到广播时,你启动一个 AsyncTask 来运行你想运行的任何过程。

您无需担心广播接收器的工作方式。

于 2012-07-12T00:55:35.407 回答