我有使用BroadcastReceiver的警报,但我对线程有点困惑。我想让它在一个单独的线程上运行,所以它不会导致对其他任何事情没有反应,但是当查看Android Docs时,我仍然不知道是否只有一个主线程,或者每个应用程序都有它的自己的主线程。
例如,如果我的应用程序没有运行,如果每个应用程序运行自己的主线程,那么在BroadcastReceiver中运行单独线程的意义是什么,这意味着我不会影响用户的其他进程。由于我没有运行,不管它做什么都不会伤害。但相反,如果所有应用程序都有一个主线程,那么我需要将操作移动到一个单独的线程。我希望我不是在问一个愚蠢的问题。我只想彻底了解它。提前谢谢。
答案 0 :(得分:8)
在浏览Android Developer页面后,我相信BroadcastReceivers在主IO线程上运行。
BroadcastReceivers具有允许
的函数goAsync将与之相关的工作移动到另一个线程的实现,以避免因磁盘IO而导致主UI线程出现故障。
答案 1 :(得分:2)
android的基本规则是,默认情况下,android的所有组件都在主线程(UI线程)中运行。
广播接收器是android的非常轻量级的组件,它必须在最多10秒内完成其功能(根据android文档)。
由于您想要从接收器发出警报,我认为它不会对用户的UI响应性产生严重影响。因此,并不是真的需要启动一个不同的线程来启动接收器的警报。
答案 2 :(得分:0)
广播接收器已注册到当前正在其所用应用程序下运行的系统。具体来说,它不会停止主线程上的任何内容,因为它是异步完成的。此特定的消息是广播的,然后传递给注册的任何进程以通过IntentFilter监听该广播(如果它受到保护,则需要许可或不可用)。
然而;好的做法是当你收到广播时,启动一个AsyncTask来运行你想要运行的任何程序。
您无需担心广播接收器的工作原理。