Ein Ausschnitt aus dem Android- Aktivitätsdokument (scrollen Sie nach unten zur Zeile " Vordergrundlebensdauer ") lautet:
Eine Aktivität kann häufig in den Vordergrund und aus dem Vordergrund heraus wechseln. Sie wird beispielsweise
onPause()
aufgerufen, wenn das Gerät in den Ruhezustand wechselt oder wenn ein Dialogfeld angezeigt wird .
Ich verstehe das nicht ganz. Unter welchen Umständen sollte dies geschehen? Wird onPause()
nur aufgerufen, wenn sich der Kontext des betreffenden Dialogfelds von der Aktivität unterscheidet, über der der Dialog angezeigt werden soll?
BEARBEITEN: Hinzufügen eines Codebeispiels, um meine Zweifel im Detail zu veranschaulichen
Sollte nach dem oben genannten Zitat aus dem Dokument die onPause()
Methode meiner Aktivität aufgerufen werden, wenn das AlertDialog
(oder nur das Dialog
) im folgenden Code angezeigt wird? Sollte der Protokolleintrag "onPause aufgerufen" angezeigt werden, wenn der Dialog angezeigt wird?
Aber ich sehe das nicht. Und das sollte es auch nicht, wenn ich den Android-Lebenszyklus richtig verstanden habe! Also, worauf zeigt das Dokument dann?
public class LifeCycleTestActivity extends Activity {
private static final String TAG = "LifeCycleTest";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button btn = (Button) findViewById(R.id.button1);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Log.d(TAG, "onClick");
AlertDialog dialog = new AlertDialog.Builder(LifeCycleTestActivity.this).create();
dialog.setMessage("You Clicked on the button");
dialog.setTitle("Dialog!");
dialog.setButton(AlertDialog.BUTTON_NEUTRAL, "OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
dialog.setCancelable(true);
dialog.show();
/*
Dialog dialog = new Dialog(LifeCycleTestActivity.this);
dialog.setTitle("Dialog!");
dialog.setCancelable(true);
dialog.show();
*/
}
});
}
@Override
protected void onPause() {
Log.d(TAG, "onPause() called");
super.onPause();
}
@Override
protected void onResume() {
super.onResume();
Log.d(TAG, "onResume() called");
}
}
onPause()
nur aufgerufen wird, wenn sich der Dialog oben auf dem Stapel befindet - das erklärt auch, warumonPause()
nicht aufgerufen wird, selbst wenn die Benachrichtigungsleiste nach unten gezogen wird, wodurch die Aktivität vollständig verdeckt wird.