mic*_*ael 139 android android-lifecycle android-activity
从android doc这里http://developer.android.com/reference/android/app/Activity.html,它说"活动进入前台"将调用onPause(),并且"活动不再可见"将调用onStop().
不是"活动进入前景"与"活动不再可见"相同吗?你能告诉我他们之间有什么区别吗?
Mal*_*olm 102
不,如果某些活动进入前景,那并不一定意味着其他活动完全不可见.考虑以下情况:

在这里,我们同时看到两个活动.带有字段的第一个活动被另一个活动遮挡,用户无法再与之交互.然而,它仍然可见所有后果.
这留下了一个问题,哪个活动被认为是完全不透明的,覆盖整个屏幕,哪个不是.此决定基于包含活动的窗口.如果窗口有一个标志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);
Run Code Online (Sandbox Code Playgroud)
nic*_*ild 34
如果您仍然可以看到它的任何部分(Activity前景不会占据整个屏幕,或者它有点透明),onPause()将被调用.如果你看不到它的任何部分,onStop()就会被调用.
例如,对话框**可能不会覆盖整个前一个对话框,Activity这将是一个onPause()被调用的时间.
**我不是指这里的Android对话,而是一个弹出的东西的概念性想法,只是模糊了部分用户屏幕.根据以下@GMsoF的评论添加了此注释以进行澄清
Yas*_*ash 14
实际上,应该考虑“onPause()”和“onPause() + onStop()”之间的区别。
每当一些新活动发生并占据屏幕的某些部分空间时。因此,您之前运行的活动在某种程度上仍然可见。在这种情况下,之前运行的活动不会被推送到 Back Stack。所以,这里只调用了 onPause() 方法。
另一方面,如果一些新的 Activity 出现并占据全屏,那么你之前运行的 Activity 就会消失。在这种情况下,您之前运行的活动将移至 Back Stack。在这里, onPause() + onStop() 被调用。
总结——
onPause() - 屏幕被其他新活动部分覆盖。Activity 不会移动到 Back Stack。
onPause() + onStop() - 屏幕被其他新活动完全覆盖。Activity 被移到 Back Stack。
了解更多 -返回堆栈。
Ted*_*opp 10
处于前台意味着活动具有输入焦点.例如,活动可以是可见的,但是被具有焦点的对话框部分遮盖.在那种情况下,onPause()将被调用,但不会onStop().当对话框消失时,onResume()将调用activity的方法(但不会onStart()).
| 归档时间: |
|
| 查看次数: |
43184 次 |
| 最近记录: |