2012-02-10 138 views
5

当文档“onPause”被调用时,当:为什么在以下情况下不会调用“onPause”?

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

相比“的onStop”,所不同的是:

当活动不再对用户可见调用,因为其他活动已经恢复并且覆盖这一个。

但是,当我长按HW-Home键和“最近使用的应用”出现时, 了“的onPause”不叫。

此时,我无法长时间与原始活动 进行互动,但仍然可见。

我很困惑这种情况。 请帮忙解释一下。

非常感谢。 BR, 亨利

+0

您可以发布你的onPause(代码) – Raj 2012-02-10 10:16:10

+0

看到:HTTP://stackoverflow.com/a/9190541/265167 – 2012-02-10 10:30:02

回答

7

实际发生这种情况是因为长时间按住Home键时,没有任何活动正在启动。 onPause/onStop仅在您选择“最近使用的应用程序”列表中显示的其中一个应用程序时才会被调用。

的onPause()的文档是很清楚的:

调用当活动即将 到背景活动生命周期的一部分,但还没有(还)被杀害。

+0

谢谢,MobileCushion, 你的回答是正确的。 关键是“最近的应用程序”不会被添加到应用程序堆栈中,因此结果是 。 – Henry 2012-02-22 06:59:52

-1

当你调出最近使用的应用调用OnStop方法被调用,调用OnStop方法被立即调用作为活动的UI不是重点,因为这样

0

@Henry请尝试自己通过测试应用程序的流程。创建一个活动,其中覆盖所有方法并在所有方法下打印日志。流程是onCreate >> onStart/restart >> onResume,当你按Home键或开始任何新的活动,然后它调用onPause >> onStop,如果你完成你的应用程序,那么你的应用程序是销毁/完成,所以在哪里混乱。

0

这是官方文件说什么onPause()

调用当活动即将 到背景活动生命周期的一部分,但还没有(还)被杀害。与onResume()的 相对应。

当活动B是活性的前推出,这个回调将 可以在A,B调用不会直到A的的onPause创建()返回,所以 一定不要做任何冗长这里。

详细信息please see this

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。按回来按钮,然后检查。再次启动应用程序和

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

2

在很多现代手机中,最近的应用程序列表是一个活动,并且确实触发。我已经在一些三星和LG手机上测试过了,分别是com.android.systemuicom.lge.launcher2

这就是说,当你打开最近的应用程序屏幕时,看起来你不能依赖于接收onPause。我很好奇,看看有多少设备不给你 ...

相关问题