2013-10-06 11 views
23

Ich habe gerade festgestellt, dass wenn das Gerät Sperrbildschirm aktiviert hat, geschieht folgendes. Für diese Aktivität wird Android: screenOrientation = "Landschaft" im Manifest festgelegt. Dann führe ich die folgenden mit meinem Telefon im Hochformat durch.Android Activity Lifecycle und Sperren/Entsperren Gerät

  1. Der Benutzer öffnet eine Aktivität.
  2. OnCreated() ist
  3. onStart() aufgerufen
  4. onResume() aufgerufen wird, heißt
  5. der Benutzer das Gerät SPERREN 4,5 onPause() aufgerufen wird
  6. onDestroy() aufgerufen
  7. onCreate() ist
  8. onStart() aufgerufen
  9. onResume genannt wird() aufgerufen wird 8,5 onPause() aufgerufen wird
  10. Der Benutzer entriegelt die Vorrichtung
  11. onResume() ist
  12. onDestroy() aufgerufen
  13. onCreate() aufgerufen wird
  14. onStart() aufgerufen wird
  15. genannt wird
  16. onResume() aufgerufen wird.

Okay, ich verstehe nicht, warum 6,7,8 ausgeführt werden, nachdem der Bildschirm ausgeschaltet geht .. Auch verstehe ich nicht, warum 11, 12, 13, 14 ausgeführt werden. Gibt es seltsame Dinge, wenn ich das Gerät sperre und entsperren? Ich bin plötzlich mit dem Aktivitätszyklus verwechselt. Kann jemand das klären?

Attache der Code und die log msg

package com.example.wf; 

import android.app.Activity; 
import android.os.Bundle; 
import android.util.Log; 

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Log.d("log", "oncreate"); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     Log.d("log", "onresume"); 
    }; 

    @Override 
    protected void onStart() { 
     super.onStart(); 
     Log.d("log", "onstart"); 
    }; 

    @Override 
    protected void onPause() { 
     super.onStart(); 
     Log.d("log", "onpause"); 
    }; 

    @Override 
    protected void onDestroy() { 
     Log.d("log", "ondestroy");  
     super.onDestroy(); 
    }; 
} 

Log msgs

10-05 23:11:07.994: D/log(23810): oncreate 
10-05 23:11:07.994: D/log(23810): onstart 
10-05 23:11:07.994: D/log(23810): onresume 
// LOCK DEVICE 
10-05 23:11:19.957: D/log(23810): ondestroy 
10-05 23:11:20.007: D/log(23810): oncreate 
10-05 23:11:20.007: D/log(23810): onstart 
10-05 23:11:20.007: D/log(23810): onresume 
// UNLOCK DEVICE 
10-05 23:11:57.407: D/log(23810): onresume 
10-05 23:11:57.537: D/log(23810): ondestroy 
10-05 23:11:57.587: D/log(23810): oncreate 
10-05 23:11:57.587: D/log(23810): onstart 
10-05 23:11:57.587: D/log(23810): onresume 
+0

Struggling mit diesem seit 2 Tagen verschiedene Optionen ausprobieren – suku

Antwort

35

Auf Telefonen (oder Tabletten, die mit der Ausrichtung verriegelt Hochformat), die Sperre Bildschirm nur Porträt. Wenn das Gerät gesperrt ist, wechselt das Gerät automatisch in den Hochformatmodus (6, 7, 8 und 9). Wenn das Gerät entsperrt ist, wird onResume() aufgerufen, da Ihr Activity sichtbar wird, aber Sie wechseln erneut zwischen Hochformat und jetzt gesperrt in Querformat, sodass die Aktivität in der Landschaft zerstört und neu erstellt wird.

+0

nette Erklärung. – Vicky

+0

Perfekt erklärt. Die Aktivität wird bei Lock/Unlock nur dann neu erstellt, wenn sie sich im Landscape-Modus befindet. – AnujDeo

2

Um das Re-Creation-Szenario zu überholen, können Sie Konfigurationsänderungen auf Aktivitätsebene per Android-Manifestdatei mit Android: configChanges = "orientation" -Attribut bearbeiten.

+0

Das hat nicht für mich funktioniert – portfoliobuilder

Verwandte Themen