1

我知道当您将设备从横向更改为纵向时,onCreate会调用该方法。这对我来说是一些问题的原因。

假设我有一个数据库,其中包含要执行的下载。我计划制作一个初始屏幕,其中 DAO 对象会将这些数据转换为对象并将它们放入Vector<DownloadTask>. 这将发生AsyncTaskdoInBackground().
onPostExecute启动画面将开始一个新的Activity.

到目前为止一切都很好,除非我必须处理方向变化。
启动屏幕后的新 Acitivity 将启动一个Timer负责调度下载的活动。这将在onCreate. DownloadTask所有实现,Runnable所以它们是线程。

当下载结束或突然停止时,线程应该将此告诉调度程序并减少同时运行的线程数。这是为了限制同时下载的数量。

那么,如果时间是正确的(或错误的),使得方向变化和线程的完成排列在一起,那么 Timer 会发生什么?会是 null 吗?

当方向改变时,变量是否重置为其默认值?
另外,如何防止方向改变?就像一些游戏一样

4

1 回答 1

2

当方向改变时,变量是否重置为其默认值?

如果它们是Activity级别变量,那么是的,它们将返回到它们的默认值,因为Activity每次都被销毁并重新创建。为避免这种情况,您可以finish()每次都保存变量,但这可能会很混乱,因为您不知道何时会发生这种情况(但有一些方法可以解决)。您还可以manifest.xml通过添加来指定您将处理这些更改

android:configChanges="orientation" 

到您的<activity>标签中manifest。在文档中,他们不推荐这样做,但我认为主要是为了掩盖他们的屁股。我这样做了,到目前为止还没有任何问题。这将防止Activity被破坏。

另外,如何防止方向改变?

你也可以manifest通过添加类似的东西来做到这一点

android:screenOrientation="portrait"

给那些你希望拥有的<activity>标签。Activitiesorientation

于 2013-08-16T01:33:43.203 回答