2012-04-20 14 views
10

AccountManager'da bir hesap oluşturan bir uygulama olduğunu varsayalım. Kullanıcı, daha sonra Android Ayarları'ndan Accounts and Sync gider, bir süre için bu uygulamanın oldukça karmaşık etkinlik grafiği araştırıyor (hala farklı bir kullanıcı olarak Accounts and Sync olmak.Bir Android uygulaması ortamdaki kritik değişikliklere nasıl yanıt vermelidir?

Ben LOGIN_ACCOUNTS_CHANGED yayın için bir alıcı tanımladığınız hesabı ve işaretleri kaldırır ve tüm hizmetleri incelikle kapatabiliyorum.Ancak aktiviteler hala orada, ilk kullanıcının adını kendi başlığında taşıyor (UI bir çok yoldan dağılır ama bu en açık olanıdır.)

Yani soru şu: bu yetim faaliyetleri hakkında ne yapılması gerektiği

    ?
  • clearTaskOnLaunch gibi bir şey kullanabilirdim, ancak değişiklik gerçekleştiğinde tüm etkinlikler arka planda.
  • SharedPreferences'ta bir bayrak ayarlayın ve her etkinliğin onResume()'unu işaretleyin, ardından gerekirse clearTask etkinliğini başlatın. Çok dağınık.
  • En iyi seçenek, tüm etkinlikleri öldürmek için android.os.Process.killProcess(android.os.Process.myPid()) kullanmaktır. Bu çok zarif değil, ama iş bitti. Tek yan etkisi, net bir geçmişe sahip olan LAUNCHER etkinliğinden başlamak için en makul şey olduğu zaman etkinlik yığınının hala orada olmasıdır.

Tanımlanan senaryoya yanıt vermenin en iyi yolu ne olurdu?

+1

Process.killProcess() kullanımı her zaman bir çözümdür, asla doğru çözüm değildir. – hackbod

+0

Katılıyorum, dolayısıyla soru. – Ash

cevap

5

Tüm aktiviteleriniz, BroadcastReceiver üye: mChangeReceiver üyesi olan MyActivity sınıfından çıkar.

onCreate yılında MyActivity kayıt mChangeReceiver Var (ve onDestroy içinde kaydını) LOGIN_ACCOUNTS_CHANGED niyetine.

mChangeReceiver, tüm genişletme sınıflarının GUI'deki değişikliği yansıtacak şekilde geçersiz kılınması ve uygulanması için gerekli olan soyut bir yöntem olan onAccountChanged()'u çağırın.

İşte bu kadar. Şimdi, hesap değiştiğinde, tüm yaşam aktiviteleriniz onAccountChanged yöntemini çağırır ve GUI'lerini yeniler.

+2

Fikir için teşekkürler, işe yarayabilir.Uygulamayı bir şekilde veya başka bir şekilde yeniden başlatacak bir çözüm aramasına rağmen, bir kullanıcının diğerine etkinlik yığını göstermesi iyi bir fikir gibi görünmüyor. Finish() 'i çağırmayı deneyeceğim ve nasıl gittiğini göreceğim. – Ash

0

i Kullanıcıların-giriş mekanizmasına sahip gerçeğine dayalı bazı fikirleri var: UI, yaklaşık

OnPause üzerine adı UI (muhtemelen TextView'un) güncelleme hakkında "" ve onResume üzerine güncel kullanıcıya güncelleme nasıl ? Gerekirse kapanış aktiviteleri hakkında

, mevcut kullanıcıyı global değişkene ve aktiviteye kaydedebilirsiniz. Her etkinlik, global olanın, en son güncellendiğinde depolananla aynı olup olmadığını kontrol etmelidir. Farklılarsa, aktiviteyi kapatabilirsiniz. Yazdığınız gibi clearTask bayrağını da kullanabilirsiniz.

Faaliyetlerin üstesinden gelmenin başka bir yolu, bunun yerine parça yığınlarını kullanmaktır. Daha fazla bilgi için parça yığınının android destek örneklerini kontrol edin.

İlgili konular