2012-01-25 78 views
4

在我的Activity中,我重寫了onConfigurationChanged()方法,因爲它正在播放視頻,我不想等待一秒鐘,直到系統再次準備就緒在更改設備的方向後繼續播放視頻。這工作得很好 - 我的視頻一直播放流暢,方向得到改變,而視頻被重新調整以適應屏幕尺寸。Android - onConfigurationChanged()在暫停之前調用Activity之前調用Activity

然而,我發現了一個錯誤時,採取以下步驟:

  1. 我在視頻播放期間暫停我的應用程序
  2. 我改變方向
  3. 我「恢復」我的應用程序

第一事情會發生什麼:onConfigurationChanged()被調用,而不是onResume()之後,所有的字段應該被恢復!這會導致一個Exception除以零作爲原因 - 一些字段等於0,因爲它尚未恢復。當然這不是期望的行爲。當我的應用程序以與它暫停的方向相同的方向恢復時,它的確可以工作。

雖然我可以通過使用指示我的Activity是否「完全加載」的布爾值來繞過這個問題,也就是說,onResume()方法已經調用。但我認爲這不是一個很乾淨的解決方案。

我的問題是:

  1. 這是預期的行爲?我認爲onConfigurationChanged()在onResume()之前被調用是很奇怪的。這是一個錯誤?
  2. 我可以通過編程方式「註銷」我的應用程序從暫時監聽onConfigurationChanged()(例如,在onPause()方法中取消註冊它)嗎?由於這種方法不會被調用,因爲你必須註冊一些監聽器,但被調用,因爲你在AndroidManifest.xml文件,就把這行:

    機器人:configChanges =「方向」

回答

1

1 - 答案http://developer.android.com/reference/android/app/Activity.html

在某些特殊情況下,你可能想繞過基於一個或多個類型的配置更改重新啓動 活動。這是用其清單中的android:configChanges屬性完成的 。對於任何 類型的配置更改,你說你在那裏處理,你將 接收到您當前活動的 onConfigurationChanged(配置)方法調用,而不是被重新啓動 。但是,如果配置更改涉及任何不是 句柄,則該活動仍將重新啓動,並且將不會調用onConfigurationChanged(Configuration)( )。

所以其正常的onconfugrationchanged早叫允許重新開始活動之前改變.. 2 - 我不知道這個..

+1

這不是一個回答我的問題。我知道onResume()不會被調用,如果我的應用程序正在運行,我重寫onConfigurationChanged()。問題是在我的應用程序暫停時方向發生變化的上下文中提出的 - 因此,onResume()應該在恢復時調用。它確實被調用,但不會在onConfigurationChanged()之前,這就是問題所在。我已經閱讀了您提供的文檔,以至於不能啓發我,但無論如何thx。 – Timmos

相關問題