Domanda

C'è un modo per registrarsi per gli eventi di un'attività?Sono specificamente interessato agli eventi OnStart / OnStop, e non voglio aggiungere operazioni speciali nell'attività per questo.

È stato utile?

Soluzione

Un modo per ottenere eventi dal ciclo di vita di altre attività è registrare la tua classe come Application.ActivityLifecycleCallbacks con l'istanza principale di Application e gli eventi filtranti per il Activity a cui sei interessato.

Questo è un breve esempio (è possibile registrare le callback da un altro metodo / classe diverso da MainActivity.onCreate o ti mancherà quel messaggio;) e potresti avere una dipendenza lì che non vuoi) sull'attività che vuoi spiare:

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Register a spy for this activity
        getApplication().registerActivityLifecycleCallbacks(new ActivitySpy(this));
    }
}
.

Allora il codice spia sembra qualcosa di simile:

public class ActivitySpy implements ActivityLifecycleCallbacks {

    private final Activity mActivity;

    public ActivitySpy(Activity activity) {
        mActivity = activity;
    }

    @Override
    public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
        if (mActivity == activity)
            Log.i("SPY", "Activity Created");
    }

    @Override
    public void onActivityDestroyed(Activity activity) {
        if (mActivity == activity)
            Log.i("SPY", "Activity Destroyed");
    }

    // (...) Other overrides

}
.

Puoi anche registrare la spia da un altro luogo se si ha un riferimento all'attività che desideri seguire.

Spero che questo aiuti :)

Modifica: Ho dimenticato di menzionare, questo funzionerà solo su Livello API 14 e sopra ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top