sendBroadcast通过UI或非UI线程?

时间:2015-05-07 13:21:31

标签: android multithreading runnable android-runonuithread

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

5 个答案:

答案 0 :(得分:4)

您可以阅读sendBroadcast的文档:

  

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

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

答案 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。

因此,即使您多次调用它,即使它是异步的,也似乎可以将其阻止。