通过文件," onPause"在以下情况下被称为:
当系统即将开始恢复之前的活动时。
与" onStop"相比,区别在于:
当活动不再对用户可见时调用,因为另一个活动已经恢复并且正在覆盖此活动。
但是,当我长按HW-Home键和"最近的应用程序"出现, " onPause"不被称为。
此时此刻,我无法与原始活动互动, 但它仍然可见。
我对这种情况感到困惑。 请帮忙解释一下。
非常感谢你。 BR, 亨利
答案 0 :(得分:7)
这实际上是因为长按Home键时,没有启动任何活动。只有当您选择“最近的应用”列表中的某个应用时,才会调用onPause / onStop。
onPause()的文档很清楚:
当活动进行时,被称为活动生命周期的一部分 进入后台,但尚未被杀死。
答案 1 :(得分:3)
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后退按钮,然后检查。再次启动应用程序和
按下呼叫按钮,然后检查logcat,现在按“返回”按钮再次检查logcat。你可以很容易地理解Activity的生命周期。
答案 2 :(得分:2)
在很多现代手机中,最近的应用列表是一项活动,并触发onPause
。我已经在几部三星和LG手机上对此进行了测试,这些软件包分别为com.android.systemui
和com.lge.launcher2
。
也就是说,当您打开最近的应用程序屏幕时,似乎您不能依赖于接收onPause。我很想知道有多少设备没有给你onPause
...
答案 3 :(得分:0)
@Henry请通过测试应用程序流程来尝试自己。创建一个活动,在其中覆盖所有方法并在所有方法下打印日志。流程是onCreate>> onStart / restart>> onResume,当您按下主页按钮或启动任何新活动时,它会调用onPause>> onStop,如果您完成了应用程序,那么您的应用程序将被销毁/完成,这样就会出现混乱
答案 4 :(得分:0)
这是官方文件中关于onPause()
的说法当活动进行时,被称为活动生命周期的一部分 进入后台,但尚未被杀死。对应的 的onResume()。
当活动B在活动A前面启动时,此回调将会 可以在A上调用。在A的onPause()返回之前,不会创建B.所以 一定不要在这里做任何冗长的事情。
详细信息please see this。