Несколько MapActivity в стеке - PullRequest
3 голосов
/ 25 января 2011

Я понимаю, что эта тема освещалась несколько раз, и часто предлагаемое решение для использования "нескольких" классов MapActivity заключается в запуске одного из них в разных процессах.Я не хочу этого делать, у меня есть 3.

Вместо этого я реорганизовал один подкласс MapActivity для работы в 3 различных режимах.


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)

Правильно ли я к этому отношусь?Должен ли я быть обеспокоен этой ошибкой?

1 Ответ

6 голосов
/ 15 декабря 2011

У меня возникла та же проблема, и после поиска я нашел этот пост о той же проблеме

https://novoda.lighthouseapp.com/projects/63622/tickets/157-leak-receiver-searchresult

предполагает, что проблема возникает при использовании нескольких map activities в вашем приложении.

поэтому в manifest.xml файле моего приложения каждый картографический файл выполнялся в отдельном процессе:

android:process=":p1"
android:process=":p2"

Вы можете узнать больше об этом в документации для Android. http://developer.android.com/guide/topics/manifest/activity-element.html#proc

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...