SORU
8 EYLÜL 2010, ÇARŞAMBA


Bir Android uygulaması eğer kontrol arka planda çalışan

Arka plan, Yani uygulama faaliyetleri hiçbiri şu anda kullanıcı tarafından görülebilir?

CEVAP
2 Mayıs 2011, PAZARTESİ


Uygulama arka planda çalışır durumda olup olmadığını tespit etmek için birkaç yolu vardır, ama sadece biri tamamen güvenilir

  1. Doğru çözüm(kredi Dan, CommonsWare NeTeInStEiN gidin)
    Activity.onPause, Activity.onResume kendinizi yöntemleri kullanarak uygulamanızın görünürlüğünü izlemek. Store "görünürlük" başka bir sınıfta durum. İyi seçimler Application kendi uygulaması veya Service (eğer hizmetten faaliyet görünürlüğünü kontrol etmek isterseniz de bu çözüm a few variations var).

    Örnek
    Uygulamaya özel Application Sınıf (isActivityVisible() statik yöntem not):

    public class MyApplication extends Application {
    
      public static boolean isActivityVisible() {
        return activityVisible;
      }  
    
      public static void activityResumed() {
        activityVisible = true;
      }
    
      public static void activityPaused() {
        activityVisible = false;
      }
    
      private static boolean activityVisible;
    }
    

    Kayıt AndroidManifest.xml uygulama sınıf:

    <application
        android:name="your.app.package.MyApplication"
        android:icon="@drawable/icon"
        android:label="@string/app_name" >
    

    Ekle onPause onResume *Her 14* proje (oluşturma Bir ortak ata için Faaliyetleri istiyorsan al, ama eğer faaliyettir zaten extended MapActivity/ListActivity vb. hala elle yazın):

    @Override
    protected void onResume() {
      super.onResume();
      MyApplication.activityResumed();
    }
    
    @Override
    protected void onPause() {
      super.onPause();
      MyApplication.activityPaused();
    }
    


    Güncelleme
    ActivityLifecycleCallbacks API seviyesi eklenmiştir 14 (Android 4.0). Uygulama faaliyeti şu anda kullanıcı için görünür olup olmadığını takip etmek için kullanabilirsiniz. Detayları için aşağıda Cornstalks' answer kontrol edin.

  2. Yanlış olanı
    Aşağıdaki çözüm önermek için kullandım

    Şu anda RunningAppProcessInfo kayıtların listesini verir ActivityManager.getRunningAppProcesses() ile uygulama arka plan/ön plan algılayabilirsiniz. Eğer uygulama ön planda olup olmadığını belirlemek için eşitlik RunningAppProcessInfo.processName uygulama paketi adınızı eşittir 21* *RunningAppProcessInfo.importance alanı kontrol edin.

    Ayrıca eğer uygulama ActivityManager.getRunningAppProcesses() UI iş parçacığı ararsan Senin görevin önemi IMPORTANCE_FOREGROUND aslında ön planda olup olmadığını olursa olsun dönecektir. Arka plan iş parçacığı, çağrı (AsyncTask örneğin) ve doğru sonuçları döndürür.

    Bu çözüm (ve aslında çoğu zaman çalışır) olsa da ben şiddetle kaçınmak için kullanmasını tavsiye ederim. Ve burada neden. As Dianne Hackborn wrote:

    Bu API uygulamaları UI akışını üsteki için orada değildir, ama kullanıcı çalışan uygulamaları göstermek gibi şeyler, ya da bir görev yöneticisi, ya da böyle bir şey.

    Evet liste bu işler için bellekte tutulur. Ancak, kapalı bir süreç, yönetilen iş parçacığı çalışan ayrı ayrı sevgiler, ve bir şey bana güvenebilirsin (a) görmek için zaman yapmak için doğru bir karar veya (b) tutarlı bir resim ile geri döndüğünde. Ayrıca karar hakkında ne "gelecek" etkinliği için gitmek her zaman olduğu noktada anahtar bir şey değildir kadar bu noktadan (aktivite durumu kısaca kilitli için anahtarı) bu da bildiğimiz için nasıl emin sonraki şey olacak.

    Ve uygulanması ve küresel davranış içinde aynı kalmasını garanti edilmez.

    Bir cevap bu KADAR yazdım bunu daha önce okumak isterdim, ama umarım benim hatayı itiraf etmek için çok geç değil.

  3. Başka bir yanlış çözüm
    36 ** kütüphane cevapları bir söz isApplicationBroughtToBackground yöntemi ActivityManager.getRunningTasks kullanır. Dianne yorum yukarıda ve bu yöntem ya da kullanmayın.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • isupportthegosselins

    isupporttheg

    6 Aralık 2009
  • Kai Moosmann

    Kai Moosmann

    5 Temmuz 2006
  • WOSU Public Media

    WOSU Public

    23 AĞUSTOS 2007