我有一个接收器,它执行呼叫详细信息保存任务,例如存储来电、去电等。所有这些详细信息都会保存到 sqlite DB 中。如果我的活动没有运行,那就没问题了。
有时,当我的活动正在运行时,我会接到一些来电。接收器运行并将数据存储到数据库。 UI 不会刷新,因为它永远不知道数据库中的更改。
在这里,我需要手动告诉接收者,活动是否正在运行刷新屏幕。如何在android中实现这个过程。
我对这部分有点困惑
您可以使用 LocalBroadcastManager 向您的 Activity 发送本地广播(比使用全局广播更高效、更安全):
Intent intent = new Intent(action);
LocalBroadcastManager mgr = LocalBroadcastManager.getInstance(context);
mgr.sendBroadcast(intent);
http://developer.android.com/reference/android/support/v4/content/LocalBroadcastManager.html
您的 Activity 必须在 onStart 中注册 BroadcastReceiver 并在 onStop 中取消注册:
private BroadcastReceiver mBroadcastReceiver;
mBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// do your thing
}
};
LocalBroadcastManager mgr = LocalBroadcastManager.getInstance(this);
mgr.registerReceiver(mBroadcastReceiver, new IntentFilter(action));
在 onStop 中:
mgr.unregisterReceiver(mBroadcastReceiver)
现在这就是 Android 的官方方式。我当然更喜欢使用像 Otto 或 EventBus 这样的事件/消息总线(https://github.com/greenrobot/EventBus)。您可以使用它们在应用程序中的不同组件之间广播消息/事件。优点是您不需要访问上下文(就像使用广播时一样),它速度更快,并且迫使开发人员进行面向对象编程(因为事件始终是对象)。一旦开始使用事件总线,您将永远不会回头查看本地广播,并且您将替换应用程序中使用的许多有时混乱的观察者/侦听器模式。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)