2013-05-04 52 views
0

因爲我被困在這個問題上,不知道我的錯誤在哪裏我需要問你們。 當我第一次啓動我的應用程序時,一切正常,但當我按下手機上的「返回」按鈕以返回主屏幕並再次啓動應用程序(由於應用程序進入睡眠狀態,這不是一個真正的新啓動程序)一個非常奇怪的行爲。Android應用程序奇怪的行爲,當從睡夢中回來

我正在使用opengles在屏幕上繪製紋理,當我觸摸紋理時會發生變化。觸摸將boolean設置爲true,表示繪製其他紋理。但是,不管怎樣,當我測試它的值時,即使它剛剛從觸摸事件寫入true時也總是錯誤的。我想知道,因爲只有當我按下手機上的「後退」按鈕纔會發生這種情況。當我用主頁按鈕返回到主屏幕,然後移回應用程序時,此事不會發生,並且一切正常。

首先,我認爲它是線程2不同線程(觸摸事件的活動渲染線程和表面視圖線程)的東西,但即使同步所有get/set方法,它仍然不起作用。我開始認爲觸摸線程的東西仍然在舊對象上運行,並且在渲染線程中的引用被新實例化的情況下改變了值,因此布爾值通過觸摸來設置,但渲染線程僅採用默認值,因爲它們變得不同反對什麼顯然不可能。

我在我的知識完了嘛,所以請賜教

編輯:嗯,我發現了錯誤...當設備來自它創造了另一個對象(紋理方)睡眠回來,然後觸摸事件發生在舊的一個沒有被刪除,並且新的被繪製。

此外,如果有人能夠告訴我什麼樣的確切方法從睡眠中回來,會很好嗎?它只是onResume還是更多?那麼引用呢,他們也會被刪除,因爲不應該創建另一個對象,我甚至測試== null,然後創建一個新的,但不知何故,這似乎是真的,當它回來

+0

您可以發佈gl渲染器代碼以及觸摸事件中設置布爾標誌的部分嗎?它可能會幫助我們更多地解決問題 – Slartibartfast 2013-05-05 04:07:00

回答

0

作爲答案第二個問題,你可以在這裏瞭解更多的活動生命週期:http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle

我通常做的是有一個資源管理器,知道什麼已經加載和處理紋理,模型等生命週期。當我的應用程序去停止或暫停,資源管理器將卸載資源(暫停時可能不會這樣做,只有在停止時),以及應用程序恢復時,重新加載所有資源並重新生成OpenGL上下文(請記住,除非您執行某些操作,在清單上,系統將破壞這個系統OpenGL上下文)。您需要設置紋理,緩衝區對象等。您可以擴展此想法以處理在應用程序生命週期中需要堅持的所有內容。

快樂編碼!