SORU
2 Ocak 2010, CUMARTESİ


Ben't Kurtul bu hata iletisi: Etkinlik <Uygulama Adı> sızmasına ServiceConnection <ServiceConnection Adı>@438030a8 oldu aslında buraya bağlı

Benim ilk Android uygulaması üzerinde çalışıyorum, eğer bu son derece açıktır eğer öyleyse özür dilerim. Benim app üç aktivite var, ve kullanıcı ileri geri oldukça sık geçer. Aynı zamanda bir telnet bağlantısı işleyen uzaktan bir hizmeti var. Apps/telnet mesajları almak ve göndermek için bu hizmeti bağlamak lazım.

Edit Bilgilendirici Cevabınız için teşekkür BDLS. Ben yeniden yazılmış Şifremi ışık ifadelerine kullanımı arasındaki farkı bindService() gibi tek başına bir işlevi veya sonra startService(), ve ben şimdi sadece sızıntı hata iletisini zaman zaman kullanırken, Geri düğmesine döngüsü arasındaki faaliyetleri.

Bağlantı benim etkinlik aşağıdaki onCreate() ve onDestroy():

    /** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    /*
     * Initialize the ServiceConnection.  Note that this is the only place startService() is run.
     * It is also the only time bindService is run without dependency on connectStatus.
     */
    conn = new TelnetServiceConnection();
    //start the service which handles telnet
    Intent i = new Intent();
    i.setClassName( "com.wingedvictorydesign.LightfactoryRemote", "com.wingedvictorydesign.LightfactoryRemote.TelnetService" );
    startService(i);
    //bind to the service
    bindService(i, conn, 0);

    setContentView(R.layout.connect);
    setupConnectUI();

}//end OnCreate()

@Override
protected void onDestroy() {
    super.onDestroy();

    //unbind the service and null it out
    if (conn != null) {
        unbindService(conn);
        conn = null;
        }

    if(connectStatus == 0) {
        //stop the service
        Intent i = new Intent();
        i.setClassName( "com.wingedvictorydesign.LightfactoryRemote", "com.wingedvictorydesign.LightfactoryRemote.TelnetService" );
        stopService(i);
        Log.d("LightfactoryRemote", "Connect onDestroy() attempted to stop service");
        }

    Log.d("LightfactoryRemote", "Connect onDestroy()");
    }//end onDestroy()

Hizmet aktivite başlatıldığında ve etkinliğin hiç başarılı bir telnet bağlantısı yapıldı ise özelleştirmeler durdu == 0 connectStatus () başladı. Diğer etkinlikler ise başarılı bir bağlantı (==1, paylaşılan bir tercihleri kaydedilmiş connectStatus) yapılmış olsaydı hizmetine bağlamak. İşte onların onResume() ve onDestroy():

@Override
protected void onResume() {
    super.onResume();

    //retrieve the shared preferences file, and grab the connectionStatus out of it.
    SharedPreferences settings = getSharedPreferences(PREFS_NAME, MODE_WORLD_WRITEABLE);
    connectStatus = settings.getInt("connectStatus", 0);

    Log.d("LightfactoryRemote", "Focus onResume with "   connectStatus);

    //if a telnet connection is active, start the service and bind to it
    if (connectStatus == 1) {
        conn = new TelnetServiceConnection();
        Intent i = new Intent();
        i.setClassName("com.wingedvictorydesign.LightfactoryRemote", "com.wingedvictorydesign.LightfactoryRemote.TelnetService");
        bindService(i, conn, 0);
        //TODO write restore texview code
        }//end if
    }//end onResume

@Override
protected void onDestroy() {
    super.onDestroy();
    //unbind the service and null it out.
    if (conn != null) {
        Log.d("LightfactoryRemote", "Focus onDestroy() attempted to unbind service");
        unbindService(conn);
        conn = null;
        }
    Log.d("LightfactoryRemote", "Focus onDestroy()");
    }//end onDestroy()

Bu onDestroy bağlantı aktivite, ve değişen durum alacak kadar bağlayıcı olur onResume () () gerekirse ilişkisiz fonksiyonu.

Düzenleme Sonunda

Ama ben hala GB bellek sızıntısı hata iletisi "Etkinliği aslında buraya bağlı ServiceConnection @438030a8 döküldü faaliyetleri arasında geçiş yaparken" zaman zaman. Neyi yanlış yapıyorum?

Herhangi bir ipucu veya işaretçiler için şimdiden teşekkürler!!!

Tam hata iletisi aşağıdaki (yeni kod):

01-02 22:04:26.642: DEBUG/LightfactoryRemote(2024): Focus onStop()
01-02 22:04:26.642: DEBUG/LightfactoryRemote(2024): Focus onDestroy() attempted to unbind service
01-02 22:04:26.642: DEBUG/LightfactoryRemote(2024): Focus onDestroy()
01-02 22:04:26.672: ERROR/ActivityThread(2024): Activity com.wingedvictorydesign.LightfactoryRemote.LightfactoryRemote has leaked ServiceConnection com.wingedvictorydesign.LightfactoryRemote.LightfactoryRemote$TelnetServiceConnection@439e51e8 that was originally bound here
01-02 22:04:26.672: ERROR/ActivityThread(2024): android.app.ServiceConnectionLeaked: Activity com.wingedvictorydesign.LightfactoryRemote.LightfactoryRemote has leaked ServiceConnection com.wingedvictorydesign.LightfactoryRemote.LightfactoryRemote$TelnetServiceConnection@439e51e8 that was originally bound here
01-02 22:04:26.672: ERROR/ActivityThread(2024):     at android.app.ActivityThread$PackageInfo$ServiceDispatcher.<init>(ActivityThread.java:927)
01-02 22:04:26.672: ERROR/ActivityThread(2024):     at android.app.ActivityThread$PackageInfo.getServiceDispatcher(ActivityThread.java:822)
01-02 22:04:26.672: ERROR/ActivityThread(2024):     at android.app.ApplicationContext.bindService(ApplicationContext.java:842)
01-02 22:04:26.672: ERROR/ActivityThread(2024):     at android.content.ContextWrapper.bindService(ContextWrapper.java:319)
01-02 22:04:26.672: ERROR/ActivityThread(2024):     at com.wingedvictorydesign.LightfactoryRemote.LightfactoryRemote.onResume(LightfactoryRemote.java:102)
01-02 22:04:26.672: ERROR/ActivityThread(2024):     at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1225)
01-02 22:04:26.672: ERROR/ActivityThread(2024):     at android.app.Activity.performResume(Activity.java:3559)
01-02 22:04:26.672: ERROR/ActivityThread(2024):     at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2838)
01-02 22:04:26.672: ERROR/ActivityThread(2024):     at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2866)
01-02 22:04:26.672: ERROR/ActivityThread(2024):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2420)
01-02 22:04:26.672: ERROR/ActivityThread(2024):     at android.app.ActivityThread.access$2100(ActivityThread.java:116)
01-02 22:04:26.672: ERROR/ActivityThread(2024):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794)
01-02 22:04:26.672: ERROR/ActivityThread(2024):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-02 22:04:26.672: ERROR/ActivityThread(2024):     at android.os.Looper.loop(Looper.java:123)
01-02 22:04:26.672: ERROR/ActivityThread(2024):     at android.app.ActivityThread.main(ActivityThread.java:4203)
01-02 22:04:26.672: ERROR/ActivityThread(2024):     at java.lang.reflect.Method.invokeNative(Native Method)
01-02 22:04:26.672: ERROR/ActivityThread(2024):     at java.lang.reflect.Method.invoke(Method.java:521)
01-02 22:04:26.672: ERROR/ActivityThread(2024):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
01-02 22:04:26.672: ERROR/ActivityThread(2024):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549)
01-02 22:04:26.672: ERROR/ActivityThread(2024):     at dalvik.system.NativeStart.main(Native Method)
01-02 22:04:26.692: WARN/ActivityManager(558): Unbind failed: could not find connection for android.os.BinderProxy@43c509a8

2 . düzenleyin
Bir kez daha teşekkürler önerileriniz için bdls. Önerdiğin bir onUnBind ilave olarak yaptım() hizmet için geçersiz kılar. () onUnBind aslında tüm müşterilerine hizmet bağlantısını kestiğinizde sadece tetiklenir, ama ev düğmesine bastığımda, idam, sonra hata mesajı attı! Bu benim için hiçbir anlamı yoktur, tüm müşterilerine hizmet ilişkisiz olarak nasıl bir yerle bir serviceConnection sızıntısı olabilir? Şuna bakın:

01-03 19:38:30.837: DEBUG/LightfactoryRemote(1118): Focus onPause()1
01-03 19:38:31.577: WARN/IInputConnectionWrapper(1118): showStatusIcon on inactive InputConnection
01-03 19:38:31.587: DEBUG/LightfactoryRemote(1118): Focus onStop()
01-03 19:38:31.600: DEBUG/LightfactoryRemote(1118): Focus onDestroy() attempted to unbind service
01-03 19:38:31.607: DEBUG/LightfactoryRemote(1118): Focus onDestroy()
01-03 19:38:31.677: DEBUG/LightfactoryRemote(1125): TelnetService onUnBind()
01-03 19:38:31.727: ERROR/ActivityThread(1118): Activity com.wingedvictorydesign.LightfactoryRemote.LightfactoryRemote has leaked ServiceConnection com.wingedvictorydesign.LightfactoryRemote.LightfactoryRemote$TelnetServiceConnection@435baeb0 that was originally bound here
01-03 19:38:31.727: ERROR/ActivityThread(1118): android.app.ServiceConnectionLeaked: Activity com.wingedvictorydesign.LightfactoryRemote.LightfactoryRemote has leaked ServiceConnection com.wingedvictorydesign.LightfactoryRemote.LightfactoryRemote$TelnetServiceConnection@435baeb0 that was originally bound here
01-03 19:38:31.727: ERROR/ActivityThread(1118):     at android.app.ActivityThread$PackageInfo$ServiceDispatcher.<init>(ActivityThread.java:886)
01-03 19:38:31.727: ERROR/ActivityThread(1118):     at android.app.ActivityThread$PackageInfo.getServiceDispatcher(ActivityThread.java:781)
01-03 19:38:31.727: ERROR/ActivityThread(1118):     at android.app.ApplicationContext.bindService(ApplicationContext.java:820)
01-03 19:38:31.727: ERROR/ActivityThread(1118):     at android.content.ContextWrapper.bindService(ContextWrapper.java:307)
01-03 19:38:31.727: ERROR/ActivityThread(1118):     at com.wingedvictorydesign.LightfactoryRemote.LightfactoryRemote.onResume(LightfactoryRemote.java:102)
01-03 19:38:31.727: ERROR/ActivityThread(1118):     at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1225)
01-03 19:38:31.727: ERROR/ActivityThread(1118):     at android.app.Activity.performResume(Activity.java:3530)
01-03 19:38:31.727: ERROR/ActivityThread(1118):     at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2619)
01-03 19:38:31.727: ERROR/ActivityThread(1118):     at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2647)
01-03 19:38:31.727: ERROR/ActivityThread(1118):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2287)
01-03 19:38:31.727: ERROR/ActivityThread(1118):     at android.app.ActivityThread.access$1800(ActivityThread.java:112)
01-03 19:38:31.727: ERROR/ActivityThread(1118):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1692)
01-03 19:38:31.727: ERROR/ActivityThread(1118):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-03 19:38:31.727: ERROR/ActivityThread(1118):     at android.os.Looper.loop(Looper.java:123)
01-03 19:38:31.727: ERROR/ActivityThread(1118):     at android.app.ActivityThread.main(ActivityThread.java:3948)
01-03 19:38:31.727: ERROR/ActivityThread(1118):     at java.lang.reflect.Method.invokeNative(Native Method)
01-03 19:38:31.727: ERROR/ActivityThread(1118):     at java.lang.reflect.Method.invoke(Method.java:521)
01-03 19:38:31.727: ERROR/ActivityThread(1118):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782)
01-03 19:38:31.727: ERROR/ActivityThread(1118):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540)
01-03 19:38:31.727: ERROR/ActivityThread(1118):     at dalvik.system.NativeStart.main(Native Method)
01-03 19:38:31.777: WARN/ActivityManager(564): Unbind failed: could not find connection for android.os.BinderProxy@4370f8a8

Ben düşündüm de belki bir şey gibi söyledin, nereye bağlamaya hizmeti tamamlandığında unbindService() denir, ancak denedim bir arama yöntemi olarak hizmet ettim her bir faaliyet olduğunu doğrulamak için bağlayıcı olduğunu tam ve hepsi geçti gayet iyi.

Genel olarak, bu davranış, her aktivitede kalmak nasıl ile ilgili görünmüyor. İlk faaliyet serviceConnection sızıntıları bir kez, ancak hepsi, onların içinden sonra o da aynı benim gibi.

Eğer "Hemen" Dev Araçlar, bu hata önler. faaliyetleri yok açtım eğer başka bir şey,

Herhangi bir fikir tıkandım?

Teşekkürler!

CEVAP
3 Ocak 2010, Pazar


Değil sağladı herhangi bir kod LightFactoryRemote, yani bu sadece bir varsayım, ama görünüşe göre böyle bir sorun olacağını görmek kullanıyormuş bindService yöntem kendi.

Bir hizmet başlattı etkinliği onDestroy yöntemi aramıştı sonra bile koşmaya devam etmiş olduğundan emin olmak için, ilk startService kullanmalısınız.

Android startService devlet için dokümanlar:

Kullanarak startService() geçersiz kılar varsayılan hizmet ömrü olan ve idare tarafından bindService(Niyet, ServiceConnection, int): gerektirir hizmete devam çalıştıran kadar stopService(Niyet) denir, bakılmaksızın tüm istemciler bağlı.

bindService: oysa

Hizmetin gerekli arama içeriği var sürece sistem tarafından kabul edilecektir. Bu Bağlamda durdurulan bir Faaliyet, örneğin, hizmetin Etkinlik sürdürülür kadar çalışmaya devam etmek zorunda olmayacak.


Ne oldu etkinlik bağlı (ve bu nedenle başladı) servis, durdurulduğunu ve böylece sistemin düşünüyor hizmeti artık gerekli ve neden hata (ve muhtemelen durakları servisi).


Örnek

Bu örnekte hizmeti ne olursa olsun, arama faaliyet çalışıp çalışmadığını çalışan tutulmalıdır.

ComponentName myService = startService(new Intent(this, myClass.class));
bindService(new Intent(this, myClass.class), myServiceConn, BIND_AUTO_CREATE);

İlk hat servisi başlar ve ikinci etkinliğe bağlar.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Caroline Martin

    Caroline Mar

    19 EYLÜL 2008
  • Creavite

    Creavite

    8 Mart 2009
  • knopik96

    knopik96

    7 Mayıs 2011