2012-07-12 80 views
2

我有一个警报去使用BroadcastReceiver,但我对线程有点困惑。我想让它在一个单独的线程上运行,所以它不会导致对其他任何东西没有响应,但是在Android文档上查看时,我仍然不确定是否只有一个主线程,或者每个应用程序都有它的自己的主线程。当BroadcastReceiver运行时,它运行的是哪个线程,系统范围还是只有您的应用程序?

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

+0

不错的问题! – eRaisedToX 2017-03-08 08:47:49

回答

7

在浏览Android Developer页面后,我认为BroadcastReceivers在Main IO线程上运行。

BroadcastReceivers具备的功能goAsync允许

实施移动与它在工作,另一个线程来避免毛刺的主UI线程由于磁盘IO。

Source

+0

嗯,谢谢你的链接。它非常有帮助知道。我注意到它说它在主IO线程上运行,但是每个应用程序都有一个主线程? – Andy 2012-07-12 01:03:26

+0

所有应用程序共享主线程。这被称为IO线程,主线程或UI线程。这就是为什么一些应用程序有“UI滞后”问题。 UI线程上的处理将延迟处理其他UI事件,例如按下按钮等等。 http://appadvice.com/appnn/2011/12/android-lag-attributed-to-core-system-framework-here-to-stay – JustinDanielson 2012-07-12 02:21:02

+0

一位谷歌实习生张贴了它,它引起了一场风暴,很多人插话并提供了他们的意见。你会学到很多浏览和阅读这里找到的链接:https://plus.google.com/100838276097451809262/posts/VDkV9XaJRGS – JustinDanielson 2012-07-12 02:22:21

0

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

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

你无需担心广播接收机的工作原理。

+0

所以你说的是一旦它传递到BroadcastReceiver它运行在我的应用程序,而不是无论用户在做什么? – Andy 2012-07-12 01:02:31

+0

这取决于广播接收器在做什么......如果它正在运行你的应用程序的活动,那么是的,它会中断用户。然而;如果它更新数据库中的某些东西,那么不会..它会静静地运行。这只取决于设计。 – JoxTraex 2012-07-12 01:06:53

+0

啊,我明白了。那么我的BroadcastReciever只是在意图中创建一个额外的通知。这是否意味着它不会导致任何用户界面问题,或者至少不会放慢速度? – Andy 2012-07-12 01:16:06

2

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

广播接收器是Android的重量非常轻的组件,它必须在最多10秒内完成功能(按照Android文档)。

由于您想从接收器启动警报,因此我认为这不会对用户的UI响应性产生严重影响。所以并非真的需要启动一个不同的线程来启动接收器的警报。

编号取自developer android

相关问题