Фрагмент документа Android Activity (прокрутіть вниз до рядка " передній план життя ") говорить:
Діяльність часто може переходити на перший план і виходити з нього - наприклад,
onPause()
викликається, коли пристрій переходить у режим сну або коли з’являється діалогове вікно .
Я не зовсім цього розумію. За яких обставин це повинно статися? Викликається onPause()
лише в тому випадку, якщо контекст відповідного діалогового вікна відрізняється від діяльності, поверх якої діалогове вікно має відображатися?
EDIT: Додавання зразка коду, щоб детально проілюструвати мої сумніви
Якщо йти за вищезгаданою цитатою з документа, чи слід onPause()
викликати метод моєї діяльності, коли відображається AlertDialog
(або просто Dialog
) у наступному коді? Чи повинен я бачити запис журналу "onPause викликаний", коли відображається діалогове вікно?
Але я не бачу, щоб це сталося. І теж не повинно, якщо я правильно зрозумів життєвий цикл Android! Отже, на що тоді вказує документ?
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()
викликається лише тоді, коли діалогове вікно знаходиться у верхній частині стека, - це також пояснює, чомуonPause()
не викликається, навіть коли панель сповіщень опускається вниз, повністю затуляючи активність.