Android: applicazione onPause globale () e onResume ()?
-
20-09-2019 - |
Domanda
C'è qualcosa come un onPause()
globale delle applicazioni e onResume()
?
La mia attività principale in ascolto per le correzioni GPS, che voglio continuare a lavorare quando si passa a un'altra schermata / attività. Perciò non posso annullare la registrazione il mio LocationListener
nel onPause()
della propria attività. Comunque ho ancora voglia di annullare la registrazione il mio ascoltatore GPS quando si passa a un'altra applicazione (in modo da risparmiare la batteria) e di riaccenderla quando si ritorna alla mia domanda, a prescindere dallo schermo / attività che l'utente è attualmente in.
Tutte le idee?
Soluzione
C'è qualcosa di simile un'applicazione globale onPause () e onResume ()?
No, mi spiace.
La mia attività principale in ascolto per il GPS correzioni, che voglio continuare di lavoro quando si passa ad un'altra schermo / attività. Perciò non posso annullare la registrazione il mio LocationListener nel onPause propria attività (). Tuttavia ho ancora desidera annullare la registrazione il mio ascoltatore GPS quando si passa a un'altra applicazione (In modo da risparmiare la batteria) e riaccenderlo quando ritorno a mia domanda, indipendentemente da quello schermo / attività utente è attualmente in.
Ecco un possibile approccio:
Passo # 1: Spostare la logica LocationListener
in un Service
, che le attività si collegano a via della configurazione di legame locale o qualcosa del genere. Inoltre avere almeno una startService()
chiamata di servizio, quindi un unbindService()
non causerà la Service
di andare via (supponendo che si sta utilizzando il modello di legame locale).
Passo # 2:. Hanno le attività chiamano in servizio durante onPause()
e onResume()
Passo # 3: Avere il servizio mantenere un conteggio di riferimento delle attività in essere
. Passo # 4: Quando il conteggio dei riferimenti raggiunge lo zero, avere il servizio in modo di ottenere svegliati tramite un timer e TimerTask
. Inoltre, annullare tali TimerTask
sospeso se il conteggio dei riferimenti viene incrementato.
Passo # 5:. Avere il TimerTask
chiuso GPS se mai viene eseguito
La rete è che si avrà solo rilasciare GPS dopo tale dei tali quantità di inattività. Che l'inattività potrebbe essere per qualsiasi motivo.
Altri suggerimenti
È possibile creare una classe applicazione e, se le sue implementa Application.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) {
}
}
Quindi chiamare dalla vostra attività
@Override
protected void onPause() {
AppController controller=(AppController)getApplicationContext();
controller.onActivityPaused(Main3Activity.this);
super.onPause();
}