2013-04-16 14 views
7

Piszę segment kodu Android, aby pomóc śledzić wydarzenia z Androidem jako narzędzie serwisowe dla twórców aplikacji.Detektor zdarzeń dla Androida dla cyklu życia aplikacji

Na przykład główną treścią aplikacji może być tylko wyświetlanie "Witaj świecie". Mój kod będzie nasłuchiwał zdarzenia aplikacji, takiego jak onStart(), onResume(), onDestroy() itd., I śledzić te zdarzenia.

Oczywiście kod można wstawić bezpośrednio pod główną czynnością. Ale to oznacza, że ​​mój kod będzie wszędzie miejscami. Czy jest jakiś sposób, mogę stworzyć obiekt (tj. Słuchacza) i poprosić twórcę aplikacji tylko o dodanie linijki 1 ~ 2, aby użyć mojego kodu?

Odpowiedz

16

Dla poziomu API 14 i wyższego można ustawić call registerActivityLifecycleCallbacks() on the Application, aby skonfigurować detektor, który będzie informowany o zdarzeniach cyklu życia aktywności.

+0

dzięki. registerActivityLifecycleCallbacks() prawdopodobnie ten właściwy, którego szukam. –

+0

Zobacz odpowiedź Cornstalk tutaj - http://stackoverflow.com/questions/3667022/android-is-application-running-in-background/5862048 - na dobry przykład, jak z niego korzystać. –

1

Spróbuj tego podejścia

public class mYApplication extends Application { 

@Override 
    public void onCreate() { 
     super.onCreate(); 
     registerActivityLifecycleCallbacks(new MyLifecycleHandler()); 

    } 

} 

MyLifecycleHandler:

public class MyLifecycleHandler implements Application.ActivityLifecycleCallbacks { 
    private static int resumed; 
    private static int paused; 
    private static int started; 
    private static int stopped; 

    @Override 
    public void onActivityCreated(Activity activity, Bundle savedInstanceState) { 
    } 

    @Override 
    public void onActivityDestroyed(Activity activity) { 
    } 

    @Override 
    public void onActivityResumed(Activity activity) { 
     ++resumed; 
    } 

    @Override 
    public void onActivityPaused(Activity activity) { 
     ++paused; 
     android.util.Log.w("test", "application is in foreground: " + (resumed > paused)); 
    } 

    @Override 
    public void onActivitySaveInstanceState(Activity activity, Bundle outState) { 
    } 

    @Override 
    public void onActivityStarted(Activity activity) { 
     ++started; 
    } 

    @Override 
    public void onActivityStopped(Activity activity) { 
     ++stopped; 
     android.util.Log.w("test", "application is visible: " + (started > stopped)); 
    } 

    public static boolean isApplicationVisible() { 
     return started > stopped; 
    } 

    public static boolean isApplicationInForeground() { 
     return resumed > paused; 
    } 


} 

a następnie zadzwonić isApplicationInForeground statycznej metody, aby sprawdzić, czy aplikacja jest na pierwszym planie lub w tle

Powiązane problemy