没有调用onPause方法

时间:2014-04-18 07:33:11

标签: android android-activity

我是Android开发的新手,现在我正在尝试了解android活动的生命周期。

我有这些方法在logcat上打印出生命周期过程:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Log.d(tag, "In the onCreate() event");
}

public void onStart() {
    super.onStart();
    Log.d(tag, "In the onStart() event");
}

public void onRestart() {
    super.onRestart();
    Log.d(tag, "In the onRestart() event");
}

public void onResume() {
    super.onResume();
    Log.d(tag, "In the onResume() event");
}

public void onStop() {
    super.onStop();
    Log.d(tag, "In the onStop() event");
}

public void onDestroy() {
    super.onDestroy();
    Log.d(tag, "In the onDestroy() event");
}

问题是onPause()永远不会被调用。我尝试按下主页按钮,从最近的应用程序列表中选择其他应用程序,关闭屏幕显示,但它只是直接调用onStop()而不是调用onPause(),然后调用onStop()。我正在阅读的书中说,如果将活动推送到后台,则支持onPause()后跟onStop()。

图书内容:

Click the Phone button on the Android emulator so that the activity is pushed to the background. 
Observe the output in the LogCat window:
11-16 06:32:00.585: D/Lifecycle(559): In the onPause() event
11-16 06:32:05.015: D/Lifecycle(559): In the onStop() event

我正在测试运行4.2.2的实际设备和运行2.3.3的虚拟设备,但结果是一样的。我只是误解了onPause的目的,或者我对调用的onPause做错了吗?

编辑:你能告诉我onPause()是否在onPause()之后被调用onHesume()什么时候被调用?是不是onResume支持恢复哪个被onPause()暂停?在我的测试程序中,onResume()仅在onStart()之后调用,而不是在onPause()之后调用。可能是因为我只有一项活动?

3 个答案:

答案 0 :(得分:3)

您没有覆盖onPause()方法。

public void onPause() {
    super.onPause();
    Log.d(tag, "In the onPause() event");
}

答案 1 :(得分:2)

肯定会打电话给{p> onPause。但我在代码中看不到被覆盖的onPause

当系统认为休眠活动是个好主意时,在onStop之后调用

onPause。这通常在您切换应用时发生。等onResume在显示活动/片段后调用onStartonResume是您转储代码的地方,该代码应在用户看到UI之前运行。

答案 2 :(得分:1)

在Java中覆盖方法时,使用@Override注释是一个非常好的习惯:

@Override  // <---- THIS !
public void onDestroy() {
    super.onDestroy();
    Log.d(tag, "In the onDestroy() event");
}

这样,编译器会帮助你,如果你拼错了方法的名字,它会说方法不是覆盖。

尝试始终强调此方法被覆盖,而不是简单的方法。

在这里,是的,其他人是对的,你没有覆盖onPause方法。你不能说它是否被调用。