Android:在什么情况下出现的对话框会导致调用onPause()?
Android文档中的一个片段(向下滚动到“前台生存期””行)说: 一个活动可以频繁地在前台进行转换 例如,当设备进入睡眠状态或 对话框出现 我不太明白这一点。在什么情况下会发生这种情况?只有当相关对话框的上下文与要显示对话框的活动不同时,才会调用Android:在什么情况下出现的对话框会导致调用onPause()?,android,dialog,lifecycle,android-lifecycle,onpause,Android,Dialog,Lifecycle,Android Lifecycle,Onpause,Android文档中的一个片段(向下滚动到“前台生存期””行)说: 一个活动可以频繁地在前台进行转换 例如,当设备进入睡眠状态或 对话框出现 我不太明白这一点。在什么情况下会发生这种情况?只有当相关对话框的上下文与要显示对话框的活动不同时,才会调用onPause() 编辑:添加代码示例以详细说明我的疑问 按照文档中的上述引用,当显示以下代码中的AlertDialog(或仅显示对话框)时,是否应调用我的活动的onPause()方法?当显示对话框时,我是否应该看到“onPause called”日志
onPause()
编辑:添加代码示例以详细说明我的疑问
按照文档中的上述引用,当显示以下代码中的AlertDialog
(或仅显示对话框
)时,是否应调用我的活动的onPause()
方法?当显示对话框时,我是否应该看到“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()
。这样做是为了给用户与之交互的东西以第一优先级。e、 g:假设您处于应用程序的主屏幕(这反过来又是一个活动),则主屏幕被称为处于前台
。当你按下某个按钮进入下一个屏幕或出现一个对话框时,下一个屏幕/活动/对话框
进入前台,而主屏幕进入后台,这只意味着主屏幕的暂停()
方法被调用。我想我记得在Android生命周期的早期版本中读到,在没有显示任何活动时调用了onPause。i、 e.如果在弹出窗口下仍然可以看到您的一点活动,则不会调用onPause
也许其他一些专家可以证明这种行为?我已经用对话框编写了很多代码,包括您提到的
AlertDialog
,我还尝试检查当对话框弹出时,是否在活动中调用了onPause()
,但到目前为止,我的结论是活动只是继续运行,而onPause()
不被称为
不确定它是否有用,但至少您现在知道还有其他人体验到了您的体验:-)当您的活动不再位于活动堆栈的顶部时,将调用onPause()
。对话框本身不是活动,因此不会替换堆栈顶部的当前活动,因此不会导致任何暂停
但是,对话框(小写)不需要由对话框类实现。例如,使用主题设置为对话框主题的活动来实现一个主题并不少见。在这种情况下,将对话框显示为活动将导致新活动位于堆栈顶部,暂停以前的活动。在我稍微奇怪的经历中
onResume
使用对话框调用。setCanceledOnTouchOut(true)
但从不调用onPause
话虽如此,我认为文档可能关注系统对话框(例如电池电量不足)。错误的是,在onPause阶段,活动不再位于活动堆栈的顶部 将活动设置为“暂停”状态-
- 活动部分可见,例如活动对话框
- 活动对象保留在内存中,它维护所有状态和成员信息,并保持与窗口管理器的连接 e、 g按下Home(主页)按钮会导致活动进入暂停()。仍处于堆栈顶部
- 我们用来添加的窗口.布局参数(标志)
- 窗口使用的是什么IBinder