2010-01-14 15 views
11

¿Hay algo así como una aplicación global onPause() y onResume()?Android: aplicación global onPause() y onResume()?

Mi actividad principal escucha las correcciones de GPS, que quiero seguir trabajando cuando cambie a otra pantalla/actividad. Por lo tanto, no puedo anular el registro de mi LocationListener en la actividad onPause(). Sin embargo, aún quiero anular el registro de mi escucha GPS al cambiar a otra aplicación (así que guardo la batería) y volver a encenderla cuando regrese a mi aplicación, sin importar en qué pantalla/actividad esté actualmente el usuario.

¿Alguna idea?

Respuesta

12

¿Hay algo así como una aplicación global onPause() y onResume()?

No, lo siento.

Mi actividad principal de escucha para el GPS correcciones, que quiero seguir trabajando al cambiar a otra pantalla /actividad. Por lo tanto, no puedo anular el registro de mi LocationListener en la actividad onPause() de . Sin embargo todavía quiero anular el registro de mi oyente GPS al cambiar a otra aplicación (así ahorrar batería) y de volver a en al volver a mi solicitud, sin importar lo que la pantalla/actividad del usuario es actualmente.

Aquí es un enfoque posible:

Paso # 1: Mover la lógica LocationListener en un Service, que las actividades se conectan a través del patrón de unión local o algo. También tenga al menos una llamada de servicio startService(), por lo que unbindService() no causará que desaparezca (suponiendo que esté utilizando el patrón local de enlace).

Paso # 2: Haga que las actividades llamen al servicio durante onPause() y onResume().

Paso # 3: Haga que el servicio mantenga un recuento de referencia de las actividades destacadas.

Paso # 4: Cuando el recuento de referencias llegue a cero, solicite al servicio que se despierte mediante un temporizador y TimerTask. Además, cancele cualquiera de esos TimerTask pendientes si el recuento de referencias se incrementa.

Paso # 5: Haga que el TimerTask apague el GPS si alguna vez se ejecuta.

La red es que solo lanzará el GPS después de tal cantidad de inactividad. Esa inactividad podría ser por cualquier razón.

+0

Muchas gracias Marcos por esa explicación detallada. – znq

+1

También es nuevo en API 14, ActivityLifecycleCallbacks. http://stackoverflow.com/questions/3667022/android-is-application-running-in-background/13809991#13809991 – Amozoss

+0

es esta respuesta sigue siendo la misma para 2016>? ¡un ciclo de vida de actividad global sería muy útil! – commonSenseCode

6

Puede crear una clase de aplicación y si implementa la aplicación.ActivityLifecycleCallbacks

public class AppController extends Application implements Application.ActivityLifecycleCallbacks 
{ 

    @Override 
    public void onActivityCreated(Activity activity, Bundle savedInstanceState) { 
     Toast.makeText(this, "----------onCreate()---------", Toast.LENGTH_LONG).show(); 
    } 

    @Override 
    public void onActivityStarted(Activity activity) { 
     Log.i("ApplicationName","----------onActivityStarted()---------"); 
    } 

    @Override 
    public void onActivityResumed(Activity activity) { 
     Log.i("ApplicationName","----------onActivityResumed()---------"); 
    } 

    @Override 
    public void onActivityPaused(Activity activity) { 
     Toast.makeText(this, "----------onActivityPaused()---------", Toast.LENGTH_LONG).show(); 
    } 

    @Override 
    public void onActivityStopped(Activity activity) { 
     Log.i("ApplicationName","----------onActivityStopped()---------"); 
    } 

    @Override 
    public void onActivitySaveInstanceState(Activity activity, Bundle outState) { 
     Log.i("ApplicationName","----------onActivitySaveInstanceState()---------"); 
    } 

    @Override 
    public void onActivityDestroyed(Activity activity) { 

    } 
} 

Luego llamada de su actividad

@Override 
protected void onPause() { 
    AppController controller=(AppController)getApplicationContext(); 
    controller.onActivityPaused(Main3Activity.this); 
    super.onPause(); 
} 
Cuestiones relacionadas