当前位置 博文首页 > 庆述倾述:AlertDialog、ProgressDialog显示不会触发Activity的o

    庆述倾述:AlertDialog、ProgressDialog显示不会触发Activity的o

    作者:[db:作者] 时间:2021-08-05 12:49

    今天偶然看见一句话:

    AlertDialog其实是Activity的一个组件,在显示对话框的时候,并没有出现onPause的调用。

    也就是说对于AlertDialog存在一些迷惑行为?

    在我们的认知中当Activity不可触摸的时候,就会调用onPause,不可见的时候就会触发onDestory。这里显然和认知略微有点差异。这里不妨试一下。

    TestActivity.java中复写各个生命周期方法,然后在xml布局中添加一个按钮,并为这个按钮添加显示AlertDialog的回调函数:

    button.setOnClickListener(new View.OnClickListener() {
    	 @Override
         public void onClick(View v) {
             AlertDialog.Builder dialog = new AlertDialog.Builder(TestActivity.this);
             dialog.setTitle("This is Dialog.");
             dialog.setMessage("This is a message.");
             dialog.setCancelable(true);
             dialog.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                 @Override
                 public void onClick(DialogInterface dialog, int which) {
                 }
             });
             dialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                 @Override
                 public void onClick(DialogInterface dialog, int which) {
                 }
             });
             dialog.show();
         }
    });
    

    测试发现,确实如果不返回,只会调用如下:
    在这里插入图片描述
    不会调用onPause
    那么也就是说这个AlertDialog其实是当前Activity的一部分。当对话框弹出并不是这个Activity不可见,而是显示了组件。

    类似的还有ProgressDialog

    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            ProgressDialog dialog = new ProgressDialog(TestActivity.this);
            dialog.setTitle("This is Dialog.");
            dialog.setMessage("This is a message.");
            dialog.setCancelable(true);
            dialog.show();
        }
    });
    
    cs
    下一篇:没有了