Pregunta

¿Existe alguna forma de registrarse para los eventos de una actividad?Estoy específicamente interesado en los eventos onStart/onStop y no quiero agregar operaciones especiales en la actividad para eso.

¿Fue útil?

Solución

Una forma de obtener eventos del ciclo de vida de otras actividades es registrar su clase como Application.ActivityLifecycleCallbacks con el principal Application instanciar y filtrar eventos para el Activity estás interesado.

Este es un breve ejemplo (es posible que desee registrar las devoluciones de llamada de otro método/clase que no sea MainActivity.onCreate o te perderás ese mensaje;) y es posible que tengas una dependencia allí que no deseas)

Sobre la actividad que deseas espiar:

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

Entonces el código espía se parece a:

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

}

También puedes registrar el espía desde otro lugar si tienes una referencia de la Actividad que quieres seguir.

Espero que esto ayude :)

EDITAR: Olvidé mencionar que esto solo funcionará en API nivel 14 y superior...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top