Android:在什么情况下出现对话框会导致 onPause() 被调用?

标签 android dialog lifecycle android-lifecycle onpause

来自 Android Activities 的 fragment 文档(向下滚动到“前台生存期”行)说:

An activity can frequently transition in and out of the foreground—for example, onPause() is called when the device goes to sleep or when a dialog appears.

我不太明白这个。在什么情况下会发生这种情况? onPause() 是否仅在相关对话框的上下文与要在其上显示对话框的 Activity 不同时调用?

编辑:添加代码示例以详细说明我的疑问

根据上述文档中的引用,我的 Activity 的 onPause() 方法是否应该在 AlertDialog(或只是 Dialog) 在下面的代码中得到显示?显示对话框时是否应该看到“onPause called”日志条目?

但我不认为会发生这种情况。如果我正确理解了 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() 当您的 Activity 不再位于 Activity 堆栈的顶部时调用。 Dialog本身不是Activity,所以不会替换栈顶的当前Activity,所以不会造成任何暂停。

但是,对话框(小写)不需要由 Dialog 类实现。例如,使用主题设置为对话框主题的 Activity 来实现一个并不少见。在这种情况下,显示 dialog-as-an-Activity 将导致新 Activity 位于堆栈顶部,从而暂停之前的位置。

关于Android:在什么情况下出现对话框会导致 onPause() 被调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7240916/

相关文章:

python - DBus 对象生命周期

android - 当系统杀死 Activity 时,它会在 onDestroy 上运行吗?

android - 如何触发react-native应用程序唤醒? (用于报警)

Android、AsyncTask、长时间运行的进程和方向更改

android - 如何使用ListRowPresenter的setRowViewSelected

Android:触摸时关闭对话窗口

c++ - 我怎样才能得到中文字符串?

android - 使用相机的指纹扫描仪

java - 在输入字段中按 Enter 时关闭自定义对话框

axios - 如何使用 Pinia 商店在 Vue3 SPA 中仅从 API 获取一次数据(在应用程序创建、外部组件或 View 上)