2013-04-16 23 views
7

Sto scrivendo un segmento di codice Android per aiutare a tracciare l'evento Android come strumento di servizio per gli sviluppatori di app.Listener di eventi Android per ciclo di vita dell'app

Ad esempio, il corpo dell'applicazione principale può essere solo per visualizzare "Ciao mondo". Il mio codice ascolterà l'evento dell'app, ad esempio onStart(), onResume(), onDestroy(), ecc. E manterrà una traccia su questi eventi.

Certamente, il codice può essere inserito direttamente sotto l'attività principale. Ma questo significa che il mio codice sarà in tutti i posti. C'è un modo, posso creare un oggetto (vale a dire un ascoltatore) e chiedere allo sviluppatore di aggiungere solo un liner 1 ~ 2 per usare il mio codice?

risposta

16

Per il livello API 14 e versioni successive, è possibile call registerActivityLifecycleCallbacks() on the Application impostare un listener per essere informati sugli eventi del ciclo di vita delle attività.

+0

grazie. registerActivityLifecycleCallbacks() probabilmente quello giusto che sto cercando. –

+0

Vedere la risposta di Cornstalk qui: http://stackoverflow.com/questions/3667022/android-is-application-running-in-background/5862048 - per un bell'esempio di come utilizzarlo. –

1

Prova questo approccio

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; 
    } 


} 

e quindi chiamare isApplicationInForeground metodo statico per verificare se l'applicazione è in primo piano o sullo sfondo

Problemi correlati