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.

Foi útil?

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...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top