Android 堆栈中有多个MapActivity
我知道这个主题已经讨论过好几次了,对于“多个”MapActivity类,建议的解决方案通常是在不同的进程中运行一个。我不想这么做,我有三个 相反,我重构了一个MapActivity子类,以在3种不同模式下运行Android 堆栈中有多个MapActivity,android,google-maps,Android,Google Maps,我知道这个主题已经讨论过好几次了,对于“多个”MapActivity类,建议的解决方案通常是在不同的进程中运行一个。我不想这么做,我有三个 相反,我重构了一个MapActivity子类,以在3种不同模式下运行 package com.rossgreenhalf.maptest.activity; import android.os.Bundle; import com.google.android.maps.MapActivity; public class MyMapActivity
package com.rossgreenhalf.maptest.activity;
import android.os.Bundle;
import com.google.android.maps.MapActivity;
public class MyMapActivity extends MapActivity {
@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
/* Inflate xml view, Set Zoom etc */
}
@Override
protected void onResume() {
super.onResume();
int mode = getIntent().getExtras().getInt("MAP_MODE");
switch(mode){
case 1:
/* Some markers to show */
break;
case 2:
/* Just one Marker */
break;
case 3:
/* Only showing my location */
break;
}
}
@Override
protected boolean isRouteDisplayed() {
return false;
}
}
我允许MapActivity的多个实例驻留在任务堆栈中,因为它的启动模式仍然设置为“标准”。这种方法似乎工作正常,我并没有收到一些人似乎收到的连接池关闭消息,我有点困惑,到底是多个MapActivity实例确实存在,还是android正在自动重用一个
然而,我得到了这个错误,我不知道它有多严重:
01-25 10:14:54.433: ERROR/ActivityThread(5620): Activity com.rossgreenhalf.maptest.activity.MyMapActivity has leaked IntentReceiver com.google.android.maps.NetworkConnectivityListener$ConnectivityBroadcastReceiver@44981cf0 that was originally registered here. Are you missing a call to unregisterReceiver()?
01-25 10:14:54.433: ERROR/ActivityThread(5620): android.app.IntentReceiverLeaked: Activity com.rossgreenhalf.maptest.activity.MyMapActivity has leaked IntentReceiver com.google.android.maps.NetworkConnectivityListener$ConnectivityBroadcastReceiver@44981cf0 that was originally registered here. Are you missing a call to unregisterReceiver()?
01-25 10:14:54.433: ERROR/ActivityThread(5620): at android.app.ActivityThread$PackageInfo$ReceiverDispatcher.(ActivityThread.java:968)
01-25 10:14:54.433: ERROR/ActivityThread(5620): at android.app.ActivityThread$PackageInfo.getReceiverDispatcher(ActivityThread.java:753)
01-25 10:14:54.433: ERROR/ActivityThread(5620): at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:799)
01-25 10:14:54.433: ERROR/ActivityThread(5620): at android.app.ContextImpl.registerReceiver(ContextImpl.java:786)
01-25 10:14:54.433: ERROR/ActivityThread(5620): at android.app.ContextImpl.registerReceiver(ContextImpl.java:780)
01-25 10:14:54.433: ERROR/ActivityThread(5620): at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:318)
01-25 10:14:54.433: ERROR/ActivityThread(5620): at com.google.android.maps.NetworkConnectivityListener.startListening(MapActivity.java:163)
01-25 10:14:54.433: ERROR/ActivityThread(5620): at com.google.android.maps.MapActivity.onResume(MapActivity.java:431)
01-25 10:14:54.433: ERROR/ActivityThread(5620): at com.rossgreenhalf.maptest.activity.MyMapActivity.onResume(MyMapActivity.java:166)
01-25 10:14:54.433: ERROR/ActivityThread(5620): at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1237)
01-25 10:14:54.433: ERROR/ActivityThread(5620): at android.app.Activity.performResume(Activity.java:3864)
01-25 10:14:54.433: ERROR/ActivityThread(5620): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3315)
01-25 10:14:54.433: ERROR/ActivityThread(5620): at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3340)
01-25 10:14:54.433: ERROR/ActivityThread(5620): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2158)
01-25 10:14:54.433: ERROR/ActivityThread(5620): at android.os.Handler.dispatchMessage(Handler.java:99)
01-25 10:14:54.433: ERROR/ActivityThread(5620): at android.os.Looper.loop(Looper.java:143)
01-25 10:14:54.433: ERROR/ActivityThread(5620): at android.app.ActivityThread.main(ActivityThread.java:4914)
01-25 10:14:54.433: ERROR/ActivityThread(5620): at java.lang.reflect.Method.invokeNative(Native Method)
01-25 10:14:54.433: ERROR/ActivityThread(5620): at java.lang.reflect.Method.invoke(Method.java:521)
01-25 10:14:54.433: ERROR/ActivityThread(5620): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
01-25 10:14:54.433: ERROR/ActivityThread(5620): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
01-25 10:14:54.433: ERROR/ActivityThread(5620): at dalvik.system.NativeStart.main(Native Method)
我是否采取了正确的方法?我应该担心这个错误吗?我遇到了同样的问题,在搜索之后,我发现了这篇关于同样问题的帖子 这表明在应用程序中使用多个
映射活动时,问题会出现
因此,在我的应用程序的manifest.xml文件中,我让每个映射活动在一个单独的进程中运行:
android:process=":p1"
android:process=":p2"
你可以在Android文档中阅读更多关于这方面的内容 此错误只是告诉您,在活动关闭后,某些接收器已注册而未注销的内容。这可能会导致应用程序内存泄漏。我理解错误,只是不知道它的真正影响。影响是应用程序中的潜在内存泄漏。@Olegas如何防止此错误?@IgorG解决方案很简单。。。根据需要,您需要在onPause/onStop/onDestroy事件中注销接收器。