Registrazione per gli eventi di un'attività
-
11-12-2019 - |
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.
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 ...