2014-04-18 108 views
0

我是新来的android开发,现在我想了解android活动的生命周期。onPause方法没有被调用

我有这些方法对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()永远不会被调用。我尝试按Home键,从最近的应用程序列表中选择其他应用程序,关闭屏幕显示,但它只是直接调用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被调用?

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

+2

你不重写'Activity.onPause'。 – adneal

+1

该代码不显示任何'onPause()'方法的日志记录。你怎么知道它没有被调用?相信我......它会被调用。 – Squonk

+0

感谢大家回答我愚蠢的问题。我无法相信我没有注意到这一点。 :( –

回答

2

您还没有重写onPause()方法。

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

确实被调用。但是我的代码中看不到覆盖的。

onStop在之后被调用,当系统认为这是休眠活动的好主意。这通常发生在您切换应用程序等时。onResume在显示活动/片段时会在onStart之后调用。 onResume是您转储应在用户看到UI之前运行的代码的地方。

+0

嗨@meredrica,你能回答我的编辑问题吗? :) –

+1

你去了。希望这可以帮助 – meredrica

1

当重写在Java中的方法,这是一个非常好的习惯使用@Override注释:

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

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

试着总是强调这个方法被覆盖,而不是一个简单的方法。

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