在android文档中,http://developer.android.com/reference/android/app/Activity.html说“活动进入前台”将调用onPause()
,而“活动不再可见”将调用onStop()
。
“活动显示在前台”和“活动不再可见”不是一样的吗?你能告诉我它们之间有什么区别吗?
发布于 2012-02-14 03:15:34
不,如果一些活动出现在前台,那并不一定意味着另一个活动是完全不可见的。考虑以下情况:
在这里,我们同时看到了这两个活动。具有字段的第一个活动被另一个活动遮挡,用户不能再与其交互。然而,它仍然是可见的,并具有所有由此产生的后果。
这就留下了一个问题,哪个活动被认为是完全不透明的并覆盖整个屏幕,哪个不是,这个决定是基于包含该活动的窗口。如果窗口具有标志windowIsFloating
或windowIsTranslucent
,则认为该活动不会使底层内容不可见,否则会导致onStop()
被调用。相关代码可以在com.android.server.am.ActivityRecord
中找到
fullscreen = ent != null && !ent.array.getBoolean(
com.android.internal.R.styleable.Window_windowIsFloating, false)
&& !ent.array.getBoolean(
com.android.internal.R.styleable.Window_windowIsTranslucent, false);
发布于 2012-02-14 03:11:15
如果你仍然可以看到它的任何部分(进入前台的Activity
不会占据整个屏幕,或者它有点透明),onPause()
将被调用。如果您看不到它的任何部分,则将调用onStop()
。
例如,对话框**可能不会覆盖之前的整个Activity
,此时将调用onPause()
。
**我在这里指的不是Android对话框,而是弹出的概念概念,它只遮挡了用户屏幕的一部分。添加此注释是为了根据下面@GMsoF的评论进行澄清
发布于 2012-02-14 03:13:29
处于前台意味着活动具有输入焦点。例如,一个活动可以是可见的,但部分地被具有焦点的对话框所遮挡。在这种情况下,将调用onPause()
,而不是onStop()
。当对话框消失时,将调用该活动的onResume()
方法(而不是onStart()
)。
https://stackoverflow.com/questions/9266417
复制相似问题