2011-08-17 73 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

我爱你,谢谢=) –