4

在单独的线程中发送广播(在我的情况下为 ACTION_APPWIDGET_UPDATE)是否比 UI 线程(可运行)更好(对于性能)?或者在 UI 线程上这样做是可以接受的做法吗?

4

5 回答 5

5

您可以阅读sendBroadcast的文档:

这个调用是异步的;它立即返回,并且您将在接收器运行时继续执行。

所以在 UI 线程上调用它是完全安全的

于 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 回答