我的应用程序有一个包含地图的主屏幕,它还包含几个其他屏幕和大约3个向地图发送广播更新的服务(折线、标记…)。
服务广播更新的地图对于广播的注册/注销,我有两个选项:
1-在onPause/onResume 上注册/注销广播
PROS:只有当地图可见时,它才能接收更新
缺点:当地图进入后台并有几个更新时,我需要在Resume上完成所有更新,这可能会导致应用程序的速度减慢
2-在onCreate/onDestroy 上注册/注销广播
PROS:无论你在的哪个屏幕上,地图都是最新的
缺点:我不确定这是否会导致内存问题或任何其他不可预见的问题
至于onDestroy可能在一段时间内不会被调用的事实,我已经考虑到了这一点,并设计了应用程序,如果"应用程序"不再处于前台,它将在30秒后关闭所有服务。
处理这个问题的最佳方法是什么?
LocalBroadcastManager类用于注册Intents并将其发送到进程中的本地对象。这会更快、更安全,因为您的事件不会离开您的应用程序。
以下示例显示了一个活动,该活动注册了一个名为my event的客户事件。
@Override
public void onResume() {
super.onResume();
// Register mMessageReceiver to receive messages.
LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver,
new IntentFilter("my-event"));
}
// handler for received Intents for the "my-event" event
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// Extract data included in the Intent
String message = intent.getStringExtra("message");
Log.d("receiver", "Got message: " + message);
}
};
@Override
protected void onPause() {
// Unregister since the activity is not visible
LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver);
super.onPause();
}
// This method is assigned to button in the layout
// via the onClick property
public void onClick(View view) {
sendMessage();
}
// Send an Intent with an action named "my-event".
private void sendMessage() {
Intent intent = new Intent("my-event");
// add data
intent.putExtra("message", "data");
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
}