gpt4 book ai didi

android - 什么是更有效的广播接收器或处理程序?

转载 作者:IT老高 更新时间:2023-10-28 23:37:49 29 4
gpt4 key购买 nike

我知道广播接收器的 onReceive() 和 Handler 的 handleMessage() 在同一个 UI 线程上运行。假设我想在同一个应用程序(进程)内的两个服务之间进行通信。我可以扩展一个广播接收器类并注册一个事件

一个处理程序,然后将其实例传递给其他服务以用于 sendMessage() 调用。在这两种情况下,我都需要添加一些新的开关盒。但是哪种方法更有效?让我们假设代码是线程安全的(没有 UI 更新)。

最佳答案

您不应使用普通广播在您自己的应用程序内的 ActivityServices 之间进行通信。您应该改用本地广播!首先,您必须像普通广播一样定义一个 BroadcastReceiver:

private static final String ACTION_EXAMPLE = "ACTION_EXAMPLE";

private final BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if(ACTION_EXAMPLE.equals(intent.getAction())) {
...
}
}
};

之后你可以像这样得到LocalBroadcastManager:

LocalBroadcastManager manager = LocalBroadcastManager.getInstance(getActivity());

你可以像这样注册BroadcastReceiver(通常你在onResume()中注册一个BroadcastReciever):

@Override
public void onResume() {
super.onResume();

LocalBroadcastManager manager = LocalBroadcastManager.getInstance(getActivity());
IntentFilter filter = new IntentFilter(ACTION_EXAMPLE);
manager.registerReceiver(this.receiver, filter);
}

不要忘记稍后取消注册 BroadcastReceiver(在 onPause() 中):

@Override
public void onPause() {
super.onPause();

LocalBroadcastManager manager = LocalBroadcastManager.getInstance(getActivity());
manager.unregisterReceiver(this.receiver);
}

最后你可以像这样发送本地广播:

LocalBroadcastManager manager = LocalBroadcastManager.getInstance(getActivity());
manager.sendBroadcast(intent);

关于android - 什么是更有效的广播接收器或处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25246185/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com