通过UI或非UI线程发送广播?

问题描述 投票:3回答:5

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

android multithreading runnable android-runonuithread
5个回答
4
投票

您可以阅读sendBroadcast的文档:

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

因此在UI线程上调用它是绝对安全的


1
投票

发送广播不是花费时间(长时间运行)的过程。因此,您也可以从主线程(UI线程)发送广播。


1
投票

广播总是异步发送的,您无需在单独的线程中运行它,以避免阻塞UI线程。 sendBroadcast()已经是非阻塞的。从sendBroadcast's documentation

public abstract void sendBroadcast(Intent intent)

将给定的意图广播给所有感兴趣的BroadcastReceiver,允许可选强制执行。 此调用是异步的;它会立即返回,然后您接收器运行时将继续执行...


0
投票

您知道BroadcastReceiver.onReceive始终在UI线程中运行。您动态注册接收器,可以指定另一个线程处理onReceive()。这是通过registerReceiver()的Handler参数完成的。

因此,最好是通过UI使用。


0
投票

[在我的某些应用程序的开发人员控制台中,当多次调用“ sendBroadcast”时,我检查了某些设备(小于0.5%)中的ANR(UI线程被阻止)。为了解决这个问题,我在背景线程中调用sendBroadcast。

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

© www.soinside.com 2019 - 2024. All rights reserved.