在UI线程(可运行的)的单独线程中发送广播(在我的情况下为ACTION_APPWIDGET_UPDATE)是否更好(性能)?或者在UI线程上这样做是否可以接受?
答案 0 :(得分:4)
答案 1 :(得分:1)
发送广播不是花时间(长时间运行)过程。所以你也可以从主线程(UI线程)发送广播。
答案 2 :(得分:1)
广播总是异步发送,您不需要在单独的线程中运行它以避免阻塞UI线程。 sendBroadcast()已经无阻塞。来自sendBroadcast's documentation:
public abstract void sendBroadcast(Intent intent)
将给定的意图广播给所有感兴趣的BroadcastReceivers,允许选择所需的 允许执行。 此调用是异步的;它会立即返回,而你 将在接收器运行时继续执行...
答案 3 :(得分:0)
如您所知,BroadcastReceiver.onReceive始终在UI线程中运行。您可以动态注册接收器,您可以指定另一个线程处理onReceive()。这是通过registerReceiver()的Handler参数完成的。
所以,如果最好你应该通过UI使用。
答案 4 :(得分:0)
在我的某些应用程序的开发人员控制台中,当多次调用“ sendBroadcast”时,我检查了某些设备(小于0.5%)中的ANR(UI线程被阻止)。为了解决这个问题,我在backround线程中调用sendBroadcast。
因此,即使您多次调用它,即使它是异步的,也似乎可以将其阻止。