为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕婉清6462132 2019-12-17 14:38:30
Android Activities文档中的一个片段(向下滚动到“ 前台寿命 ”行)说:活动可以频繁地切换到前台和从前台跳出,例如,onPause()当设备进入睡眠状态或出现对话框时,将调用该活动。我不太明白这一点。在什么情况下会发生这种情况?被onPause()称为仅如果有问题的对话的上下文是从顶部其活性的对话框将显示不同?编辑:添加代码示例以详细说明我的疑问根据文档中的上述引用,onPause()当显示以下代码中的AlertDialog(或只是Dialog)时,是否应该调用我的活动的方法?显示对话框时,我是否应该看到“ onPause named”日志条目?但我看不到这种情况。如果我正确理解了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");    }}
查看完整描述

3 回答

?
临摹微笑

TA贡献1982条经验 获得超2个赞

onPause()当您的活动不再位于活动堆栈的顶部时,将调用。对话框本身不是活动,因此不会替换堆栈顶部的当前活动,因此不会导致任何暂停。

但是,对话框(小写)不需要由Dialog类实现。例如,用Activity的主题设置为对话框主题的方法来实现它并不罕见。在这种情况下,显示“ 活动为对话框”将使新的活动位于堆栈的顶部,暂停先前的活动。


查看完整回答
反对 回复 2019-12-17
?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

错误的是,活动在onPause阶段不再保留在活动堆栈的顶部。

将活动设置为暂停状态-

  • 活动部分可见,例如活动对话框。

  • Activity对象保留在内存中,它维护所有状态和成员信息,并保持与窗口管理器的连接。

    例如,按下主页按钮会导致活动进入onPause()。仍然在堆栈顶部。

在图1中。Activity3将被销毁并从顶部堆栈中移除

在图2中。现在,任务A进入后台,但Activty X仍位于堆栈顶部。如果您在此状态下重写onPause()方法


//img1.sycdn.imooc.com//5df878120001807606170195.jpg

图1.任务中每个新活动如何将项目添加到后台堆栈的表示。当用户按下“后退”按钮时,当前活动将被销毁并且上一个活动将恢复。


//img1.sycdn.imooc.com//5df8781b000154ce02770148.jpg

图2.两个任务:任务B在前台接收用户交互,而任务A在后台等待恢复。


查看完整回答
反对 回复 2019-12-17
  • 3 回答
  • 0 关注
  • 1577 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信