在单独的线程中发送广播(在我的情况下为 ACTION_APPWIDGET_UPDATE)是否比 UI 线程(可运行)更好(对于性能)?或者在 UI 线程上这样做是可以接受的做法吗?
问问题
1993 次
5 回答
5
于 2015-05-07T13:36:21.760 回答
1
发送广播不是一个耗时(长时间运行)的过程。所以你也可以从主线程(UI线程)发送广播。
于 2015-05-07T13:24:51.710 回答
1
广播总是异步发送的,你不需要在单独的线程中运行它以避免阻塞 UI 线程。sendBroadcast() 已经是非阻塞的。来自sendBroadcast 的文档:
public abstract void sendBroadcast(意图意图)
向所有感兴趣的 BroadcastReceiver 广播给定的意图,允许强制执行可选的必需权限。这个调用是异步的;它立即返回,您将在接收器运行时继续执行...
于 2015-05-07T13:43:24.537 回答
1
在我的一些应用程序的开发人员控制台中,我在多次调用“sendBroadcast”时检查了某些设备(小于 0.5%)中的 ANR(UI 线程被阻止)。为了解决我在后台线程中调用 sendBroadcast 。
所以看起来即使它是异步的,如果你多次调用它,它也可以被阻塞。
于 2019-12-14T16:40:10.873 回答
0
如您所知,BroadcastReceiver.onReceive 始终在 UI 线程中运行。您动态注册接收器,您可以指定另一个线程处理 onReceive()。这是通过 registerReceiver() 的 Handler 参数完成的。
所以,如果最好你应该通过 UI 使用。
于 2015-05-07T13:32:21.537 回答