显示AlertDialog后未调用活动的onpause方法

Ani*_*avi -1 android android-alertdialog android-activity

我已经尝试过下面的代码来检查Activity的回调,据我所知,只要对话框出现在Activity顶部,就OnPause()应该调用Activity的方法。对话框消失时,OnResume()将触发“ 活动” 。

出乎意料的是,它并没有按预期的方式进行工作。我已经在Android M 6.0.1上进行了测试

如果我写错了,请纠正我,这是我的代码,

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

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

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

    @Override
    protected void onStart() {
        super.onStart();
    }

    @Override
    protected void onStop() {
        super.onStop();
    }


    public void onClick(View view) {
        AlertDialog.Builder builder;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            builder = new AlertDialog.Builder(MainActivity.this, android.R.style.Theme_Material_Dialog_Alert);
        } else {
            builder = new AlertDialog.Builder(MainActivity.this);
        }
        builder.setTitle("Delete entry")
                .setMessage("Are you sure you want to delete this entry?")
                .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        // continue with delete
                    }
                })
                .setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        // do nothing
                    }
                })
                .setIcon(android.R.drawable.ic_dialog_alert)
                .show();
    }
}  
Run Code Online (Sandbox Code Playgroud)

Ayu*_*are 5

当您的活动不再位于活动堆栈顶部时,将调用onPause()。ADialog本身不是活动,因此不会替换堆栈顶部的当前活动,因此永远不会调用onPause()

但是,如果您实现DialogActivity:(一个主题设置为对话框主题的活动)。在这种情况下,将对话框显示为活动将导致新活动位于堆栈顶部,因此调用onPause()


Pan*_*mar 5

我已经尝试过下面的代码来检查Activity的回调,据我了解,只要对话框出现在Activity顶部,就应该调用Activity的OnPause()方法。当对话框消失时,将触发Activity的OnResume()。

没有。文档有点混乱。当您在活动顶部调用对话框时,onPause()活动将永远不会调用。换句话说,对话框总是与调用活动联系在一起,如果该活动未处于运行状态,该对话框如何显示?

实际上,onPause()仅当您将另一个活动称为对话框(使用对话框主题或不包含全屏的活动)时才会调用。


从文档

onPause()

  • 将打开一个新的半透明活动(例如对话框)。只要该活动仍然部分可见但不清晰,它就会保持暂停状态。

您还可以阅读Android:在什么情况下出现Dialog会导致onPause()被调用?