2011-08-17 75 views
1

我有一個活動使用線程來從文件中讀取某些內容。
問題是,如果用戶決定在線程運行時旋轉屏幕,應用程序會崩潰。
我知道我可以防止屏幕採用旋轉:線程在旋轉時使活動崩潰

android:screenOrientation="portrait" 

但我想要做的是從運行,因此應用程序可以安全地重新啓動,或防止重新啓動活動停止線程。

回答

1

您可以使用asynctask並在Activity.onPause()方法上停止它。

在一個重要的節點上,設置屬性android:screenOrientation="portrait"不會阻止android在方向改變時破壞並重新創建屏幕,它將不會顯示橫向模式。

+0

我只是用'機器人的嘗試:screenOrientation =「肖像」'我認爲這確實防止機器人從重建的畫面。 – eladrich

+0

我會說實話,我從來沒有強迫過一個方向,但在書* Android繁體中的繁忙編碼指南*,部分*處理旋轉 - >強迫問題*指出「Android將*仍然*銷燬並重新創建你的活動,即使你的方向設置爲特定的值「(我希望[CommonsWare](http://stackoverflow.com/users/115145/commonsware)不介意我從他的書中複製了這個短語)。 – Augusto

-1

當用戶旋轉設備時,您的應用程序將在該過程中重新啓動,方法onDestroy被調用。所以你可以使用Activity.onDestroy方法來銷燬/停止你的線程。
http://developer.android.com/reference/java/lang/Thread.html那裏你可以找到停止,銷燬,interrumpt和其他方法,不知道現在應該使用什麼。

+0

另一個想你可以做的就是自己管理活動方向,看看這個: http://developer.android.com/guide/topics/resources/runtime-changes.html – forumercio

0

您的線程是否持有對按鈕之類的UI對象的引用?如果是這樣,因爲旋轉會破壞並重新創建活動,所以您將引用舊對象,而不是新對象。這就是爲什麼有必要銷燬並重新創建線程或asynctask。

+0

我不介意重新創建線程,問題是當我嘗試這樣做時,應用程序正在崩潰。 – eladrich

1

你必須在這個清單添加到活動聲明:

android:configChanges="keyboardHidden|orientation|screenSize" 
+0

我愛你,謝謝=) –