android:按下主页按钮和电源按钮的区别?

时间:2013-09-24 02:00:43

标签: android surfaceview home-button

有人知道按下电源按钮和主页按钮之间的区别吗? 在我的应用程序中,我尝试在活动的每个生命周期中放置一个调试语句,结果都是相同的,也就是说,活动将是onPause,然后在重新打开活动时onRestart然后onResume(如果我们按下主页)按钮之前的按钮)或当我们按下电源按钮再次打开设备时(如果我们之前按下电源按钮)。

具有相同的行为/序列,我预计我的相机应用程序在两种情况下都运行相同。但事实并非如此。我使用surfaceview预览相机。如果按主页按钮然后重新打开应用程序,它将正常运行。

但是,如果我按下电源按钮然后再按一次再将其打开,则SurfaceView会冻结,因此预览也会冻结。但是相机实际上仍在工作(如果按下相机按钮,它仍会拍摄照片)。

所以我真的陷入了这两者之间的区别......

编辑:

经过测试和测试,我发现不同之处在于,当我按下主页按钮时,应用程序将显示onPause(),然后SurfaceView将被销毁。另一方面,如果按下电源按钮,则不会破坏surfaceView。

仍然对导致这两种不同行为的原因感到困惑......

1 个答案:

答案 0 :(得分:1)

我发现了同样的问题,我相信当按下PowerButton时,设备会从横向更改为纵向以显示锁定屏幕。在我的情况下,我看到surfaceChanged而不是预期的被破坏,但宽度和高度显示变化从横向变为肖像。

修改

在我的Galaxy S2 4.1.2上按下PowerButton时,设备只进入“onPause”,表面只会改变(从横向到纵向)。 当我点击HomeButton时,它会进入“onStop”并且表面被破坏而没有任何变化。

如果您在“onPause”中尝试以下操作,则可以确定屏幕是否仍处于打开或关闭状态

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
boolean isScreenOn = pm.isScreenOn();

API lvl 7。

AFAIK在“onPause”中自己调用“onStop”是安全的,因为你无法改变真正的生命周期,你只需执行你写入停止的代码(超级方法似乎什么都不做,我检查了活动来源)