سؤال

لديّ نشاط يقوم بتطبيق LocationListener.

public class MyActivity extends MapActivity  implements LocationListener

في نشاطي ، أقوم بتسجيل قائمة موقع في onCreate ()

lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, minTime, distance, this);

في طريقة OnDestroy ، أقوم بإزالة التسجيل لـ LocationListener الخاص بي.

@Override
protected void onDestroy() {
    Utils.addDebugMsg(this,"onDestroy");
    lm.removeUpdates(this);
    super.onDestroy();
}

في طلبي ، يمكنني تغيير الوقت والمسافة ، لذلك أقوم بإعادة تخصيص مستمعي مثل هذا:

private void initializeGpsListener() {
    lm.removeUpdates(this);
    lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, minTime, distance, this);
}

لأغراض تصحيح الأخطاء ، أكتب شيئًا على الشاشة كلما تم تمكين مزود (في هذه الحالة GPS).

    @Override
    public void onProviderEnabled(String provider) {
        Utils.addDebugMsg(this,"onProviderEnabled : " + provider);
    }

ما لاحظته هو أنه في بعض الأحيان ، يتم "الحفاظ على مثيلات متعددة من نشاطي (أو قائمة الموقع). في كل مرة أقوم فيها بتشغيل مزود GPS ، بدلاً من رؤية بيان واحد "OnProviderenabled: GPS" ، أرى عدة مثيلات مختلفة من نشاطي يطبخ هذا الخط (كل ذلك في نفس الوقت).

كيف أقوم بتنظيف هؤلاء المستمعين (= أنشطتي) ، وتأكد من أن 1 فقط نشط طوال التطبيق.

هل كانت مفيدة؟

المحلول

نفذ النشاط onSharedPreferencechangelistener.

أثناء onCreate ، تم تسجيل النشاط باعتباره تفضيلًا ، ولكن لم يتم تسجيله في ondestroy ().

على هذا النحو ، حتى بعد تدمير النشاط ، لا يزال هناك إشارة إلى النشاط ، مما تسبب في الرسائل المكررة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top