14

Come impedire che un'attività venga ricreata disattivando lo schermo?Impedisci che l'attività Android venga ricreata disattivando lo schermo

Quello che faccio

  1. avvio Bejewels e passare alla schermata di gioielli.
  2. Premere brevemente il pulsante di alimentazione. Lo schermo è spento, ma il dispositivo no.
  3. Premere nuovamente il pulsante di accensione.

Quello che vedo

Lo stesso schermo come prima schermata di spegnimento.

In caso di mia domanda (una banale, solo una web-app con un unico WebView) lo scenario è il seguente:

Quello che faccio

  1. iniziare la mia app. Il metodo activityCreate() carica un URL in WebView.
  2. Premere brevemente il pulsante di alimentazione. Lo schermo è spento, ma il dispositivo no.
  3. Premere nuovamente il pulsante di accensione.

Quello che vedo

Il WebView è ricaricare la pagina.

Quello che mi aspettavo

Come nel caso Bejewels voglio vedere lo stesso schermo, che per la mia app è la pagina nel suo stato precedente: gli script sono in esecuzione, un form fields are riempita ecc

Debug ha dimostrato, che mi sbagliavo (in una domanda precedente) e OnDestroy() e onCreate() vengono chiamati uno ad uno quando lo schermo è appena acceso. E poiché sento ancora una musica, riprodotta da uno script, quando lo schermo è spento, sembra che sia l'attività che la WebView esistano fino a quando non premo di nuovo il pulsante di accensione.

Quello che ho provato.

  1. android: alwaysRetainTaskState = "true" Lo stesso comportamento.
  2. Lettura di intenti (inutilmente, non ho capito, come sono applicati alla mia situazione).
  3. Utilizzo di PhoneGap. Si comporta in modo diverso: uccide l'intera applicazione premendo il pulsante di accensione.Questo è meglio, ma non il migliore.

risposta

1
  1. creare la vista in Application.onCreate().
  2. Aggiungere la visualizzazione a un layout in Activity.onCreate().
  3. Rimuovere la vista dal layout in Activity.onDestroy().

dettagli sono qui: Attach/detach Android view to/from layout

1

aggiuntivo:

android:launchMode="singleTop" 

alla parte attività nel xml manifesto. Vedi qui http://developer.android.com/guide/topics/manifest/activity-element.html

+0

Non è cambiato nulla. (Non ho rimosso Android: alwaysRetainTaskState = "true"). – noober

+0

dopo aver premuto il pulsante di accensione per lo schermo spento e poi di nuovo per lo schermo sul onResume() viene chiamato, cosa stai facendo in onResume()? – Bush

+0

1. Sì, viene chiamato onResume(). L'ho controllato (sovrascritto e chiamato Toast). 2. Scusa per il fatto di essere stupido, non ho proprio pensato di dover fare qualcosa in onResume(). Quindi, non è stato sovrascritto e ora contiene solo la chiamata Toast. 3. Comportamento ora è il seguente: dopo aver premuto il pulsante per la prima volta, quando lo schermo è spento, la pagina si sta ricaricando in background (la musica si interrompe per riprodurre poi riproduce dall'inizio, c'è un javascript nella sezione onload della pagina web che avvia la musica giocando). – noober

28

La soluzione a questo problema potrebbe essere la stessa di quella descritta qui: onDestroy gets called each time the screen goes on

Suona come la vostra attività è stato riavviato a causa di modifiche alla configurazione, vedere http://developer.android.com/guide/topics/resources/runtime-changes.html . Il più comune è quando la tua app è in modalità orizzontale (come la maggior parte dei giochi) e poi il blocco dello schermo è attivato toccando il pulsante di accensione. Il blocco dello schermo è in modalità verticale e pertanto attiva un cambiamento di orientamento che attiva l'attività da riavviare.

Questo comportamento può essere sovrascritto con l'aggiunta di:

android:configChanges="orientation|keyboardHidden" 

... al file manifesto, se si prendono di mira livello di API inferiore a 13. O

android:configChanges="orientation|keyboardHidden|screenSize" 

... se siete livello dell'API di targeting maggiore di 13.

Nota potrebbe essere necessario andare a project-> properties e aggiornare il target di costruzione del progetto. "screenSize" non verrà riconosciuto se l'obiettivo di build è inferiore a 13.

Potrebbe essere un cambiamento di configurazione diverso che sta causando il ripristino dell'attività. Il seguente collegamento fornisce un elenco delle possibili modifiche alla configurazione: http://developer.android.com/guide/topics/manifest/activity-element.html#config