当BroadcastReceiver运行时,它在哪个线程上运行,是在系统范围内运行还是仅在您的应用程序上运行



我有一个使用BroadcastReceiver的警报,但我对Threads有点困惑。我想让它在一个单独的线程上运行,这样它就不会对其他任何事情产生响应,但当查看Android文档时,我仍然不知道是只有一个主线程,还是每个应用程序都有自己的主线程。

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

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

BroadcastReceiver具有允许的函数goAsync

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

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

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

既然您想从接收器发出警报,我认为这不会对用户的UI响应产生严重影响。因此,实际上并不需要启动不同的线程来启动接收器的警报。

参考取自开发人员android

广播接收器已注册到其所在应用程序下当前运行的系统中。具体来说,它不会停止主线程上的任何操作,因为它是异步完成的。此特定的消息被广播,然后通过IntentFilter传递给注册的任何进程以收听该广播(如果它受到保护,则需要权限或不可用)。

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

你不必担心广播接收机的工作原理。

相关内容

最新更新