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

时间:2012-02-10 10:07:09

标签: android android-activity lifecycle timing onpause

通过文件," onPause"在以下情况下被称为:

  

当系统即将开始恢复之前的活动时。

与" onStop"相比,区别在于:

  

当活动不再对用户可见时调用,因为另一个活动已经恢复并且正在覆盖此活动。

但是,当我长按HW-Home键和"最近的应用程序"出现, " onPause"不被称为。

此时此刻,我无法与原始活动互动, 但它仍然可见。

我对这种情况感到困惑。 请帮忙解释一下。

非常感谢你。 BR, 亨利

5 个答案:

答案 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.systemuicom.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