为什么在以下情况下不会调用“onPause”?

通过该文档,在以下情况下调用“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后退按钮,然后检查。之后再次启动应用程序和

按下呼叫按钮然后检查logcat现在按Back按钮再次检查logcat。 您可以轻松了解Activity的生命周期。

在许多现代手机中,最近的应用程序列表是一项活动,并且会触发onPause 。 我在com.lge.launcher2三星手机和LG手机上测试了这款产品,包装分别是com.android.systemuicom.lge.launcher2

也就是说,当您打开最近的应用程序屏幕时,似乎不能依赖于接收onPause。 我很想知道有多少设备没有给你onPause

@Henry请通过测试应用程序流程来尝试自己。 创建一个活动,在该活动中覆盖所有方法并在所有方法下打印日志。 流程是onCreate >> onStart / restart >> onResume,当你按下主页按钮或启动任何新活动然后它调用onPause >> onStop,如果你完成了你的应用程序,那么你的应用程序是破坏/完成所以混淆。

这是官方文件中关于onPause()的内容

当活动进入后台但被(但)尚未被杀死时,被称为活动生命周期的一部分。 onResume()的对应部分。

当活动B在活动A前面启动时,将在A上调用此回调。在A的onPause()返回之前不会创建B,所以一定不要在这里做任何冗长的事情。

详情请见 。

当您调出最近的应用程序调用onStop方法时,只要活动的UI不在焦点上就会调用onStop方法