向谷歌地图注册/注销最佳地点的活动发送广播



我的应用程序有一个包含地图的主屏幕,它还包含几个其他屏幕和大约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);
} 

最新更新