Registrando-se nos eventos de uma atividade
-
11-12-2019 - |
Pergunta
Existe uma maneira de se inscrever nos eventos de uma atividade?Estou especificamente interessado nos eventos onStart/onStop e não quero adicionar operações especiais na atividade para isso.
Solução
Uma forma de obter eventos do ciclo de vida de outras atividades é registrar sua turma como Application.ActivityLifecycleCallbacks
com o principal Application
instância e filtrar eventos para o Activity
você está interessado.
Este é um pequeno exemplo (você pode querer registrar os retornos de chamada de outro método/classe diferente MainActivity.onCreate
ou você perderá essa mensagem;) e poderá ter uma dependência que não deseja)
Na atividade que você deseja espionar:
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));
}
}
Então o código do Spy se parece com:
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
}
Você também pode registrar o espião de outro local se tiver uma referência à Atividade que deseja acompanhar.
Eu espero que isso ajude :)
EDITAR: Esqueci de mencionar que isso só funcionará em API nível 14 e superior...