根据文档,在以下情况下调用“onPause”:
当系统即将开始恢复以前的活动时。
与“onStop”相比,区别在于:
当活动不再对用户可见时调用,因为另一个活动已恢复并正在覆盖该活动。
但是当我长按 HW-Home 键并显示“最近的应用程序”时,不会调用“onPause”。
此时,我无法再与原始活动交互,但它仍然可见。
我对这种情况感到困惑。请帮忙解释一下。
非常感谢你。BR,亨利
根据文档,在以下情况下调用“onPause”:
当系统即将开始恢复以前的活动时。
与“onStop”相比,区别在于:
当活动不再对用户可见时调用,因为另一个活动已恢复并正在覆盖该活动。
但是当我长按 HW-Home 键并显示“最近的应用程序”时,不会调用“onPause”。
此时,我无法再与原始活动交互,但它仍然可见。
我对这种情况感到困惑。请帮忙解释一下。
非常感谢你。BR,亨利
这实际上会发生,因为当长按 Home 键时,没有启动任何活动。仅当您选择“最近使用的应用程序”列表中存在的应用程序之一时,才会调用 onPause/onStop。
onPause() 的文档非常清楚:
当活动进入后台但尚未(尚未)被杀死时,作为活动生命周期的一部分调用。
public class MainActivity extends Activity
{
String tag="my result";
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.v(tag,"I am in oncreate");
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
Log.v(tag,"I am in onDestroy");
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
Log.v(tag,"I am in onpause");
}
@Override
protected void onRestart() {
// TODO Auto-generated method stub
super.onRestart();
Log.v(tag,"I am in onRestart");
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
Log.v(tag,"I am in onresume");
}
@Override
protected void onStart() {
// TODO Auto-generated method stub
super.onStart();
Log.v(tag,"I am in onstart");
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
Log.v(tag,"I am in onstop");
}
}
运行它并检查 logcat.press 后退按钮然后 check.after 再次启动应用程序并
按呼叫按钮然后检查 logcat 现在按返回按钮并再次检查 logcat。您可以轻松了解Activity的生命周期。
在许多现代手机中,最近的应用程序列表是一项活动,并且会触发onPause
. 我已经在几部三星和 LG 手机上对此进行了测试,包装分别是com.android.systemui
和com.lge.launcher2
。
也就是说,当您打开最近的应用程序屏幕时,您似乎不能依赖接收 onPause。我很想知道有多少设备不给你onPause
...
@Henry 请通过测试应用程序的流程来尝试自己。创建一个覆盖所有方法并在所有方法下打印日志的活动。流程是 onCreate>>onStart/restart>>onResume,当您按下主页按钮或启动任何新活动时,它会调用 onPause>>onStop,如果您完成您的应用程序,那么您的应用程序将被销毁/完成,所以混乱在哪里。
这就是官方文档中关于onPause()的说法
当活动进入后台但尚未(尚未)被杀死时,作为活动生命周期的一部分调用。onResume() 的对应项。
当活动 B 在活动 A 之前启动时,将在 A 上调用此回调。在 A 的 onPause() 返回之前不会创建 B,因此请确保此处不要做任何冗长的事情。
详情请看这个。