2013-09-24 97 views
2

有沒有人知道按下電源按鈕和主頁按鈕之間的區別? 在我的應用程序中,我試着在活動的每個生命週期中放置一個調試語句,並且兩者的結果都是一樣的,也就是活動將在onPause上,並且在活動重新打開時將onRestart,然後onResume(如果我們按或者當我們通過按電源按鈕再次打開設備時(如果我們早點按電源按鈕)。android:按下home按鈕和電源按鈕之間的區別?

具有相同的行爲/序列,我期望我的相機應用程序在兩種情況下都運行相同。但事實並非如此。我用surfaceview預覽到相機。如果按主頁按鈕,然後重新打開應用程序,它將正常運行。

但是,如果我按下電源按鈕,然後再次按下它再次打開它,surfaceView凍結,因此預覽也凍結。但相機實際上仍在工作(如果我按下相機按鈕,它仍會拍攝照片)。

所以我真的停留在這是什麼兩者之間的區別......

編輯:

測試和測試後,我發現其中的差別是,當我按Home鍵,該應用程序將onPause(),然後surfaceView將被銷燬。另一方面,如果我按下電源按鈕,surfaceView不會被破壞。

仍然困惑是什麼引起的,雖然兩個不同的行爲......

+0

你是否在'onPause ()' – FoamyGuy

+0

@FoamyGuy是我! – CodingBird

+0

當表面視圖凍結時,logcat中有什麼? – FoamyGuy

回答

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拉特7

據我所知它是安全的,叫「的onStop」自己「onPause」因爲你不能導致真正的生命週期發生變化,你只需執行你寫入停止的代碼(超級方法似乎什麼都不做,我檢查了活動源)

+0

這可能是一種可能性!永遠不要檢查表面是否僅僅被改變而不被破壞。但我最終做的是摧毀並重新創建表面視圖:) – CodingBird

+0

我編輯了一點更多的幫助 – NikkyD