Android 如何防止仅在一段时间内而不是在所有时间内更改设备方向时重新启动活动

Android 如何防止仅在一段时间内而不是在所有时间内更改设备方向时重新启动活动,android,android-activity,orientation-changes,Android,Android Activity,Orientation Changes,在我的活动中,oncreate()中完成了很多处理,比如打开数据库、在sd卡上写入文件。但所有这些繁重的处理只在第一次启动活动时发生一次,而不是在第一次启动之后。我使用异步任务来实现这一点 我使用以下代码来防止在设备配置更改期间重新启动活动 if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT){ setRequestedOrienta

在我的活动中,oncreate()中完成了很多处理,比如打开数据库、在sd卡上写入文件。但所有这些繁重的处理只在第一次启动活动时发生一次,而不是在第一次启动之后。我使用异步任务来实现这一点

我使用以下代码来防止在设备配置更改期间重新启动活动

if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT){
                    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
                }
                else {
                    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
                }
我只希望在初始设置发生时,由于设备方向的更改而禁用“活动重新启动”,并且在此之后,我希望启用“活动重新启动”。你知道我怎样才能做到这一点吗?

他们说:“如果你不能打败他们,就加入他们。”。因此,您应该更好地组织应用程序工作流

在标准生命周期方法(onCreate、onStart等)中保留与UI相关的操作,并要求对其他线程执行长期操作

请看一下AsyncTask和IntentService类,它们将对您非常有用


总而言之,使代码适应底层系统通常比强制系统本身遵循您的意愿更容易

将其添加到清单文件中的活动标记中


android:configChanges=“orientation | keyboardHidden”

最简单的方法是调用
setRequestedOrientation(ActivityInfo.SCREEN\u orientation\u SENSOR)
。不过,我最好考虑一下STT LCU所说的话。以下是我建议从以下几篇文章开始:


OP在帖子中表示,他们已经知道AsyncTask。他知道AsyncTask,但他不知道如何在配置更改时正确保留对它的引用。就好像我知道柴油发动机,只是因为我听说过它们。随便了,谢谢。。我肯定会用类似的思路思考,并尝试改进我的代码。当然!从长远来看,您将从这种方法中获得更多好处。请记住,用户在应用程序卡住的情况下旋转设备是非常烦人的!虽然这可能会起作用,但这是一种非常糟糕的做法,因为如果您打开设备,您的应用程序将崩溃。这就像是治疗症状而不是原因。注意:应该避免使用此属性,并且只能作为最后手段使用。有关如何正确处理由于配置更改而重新启动的更多信息,请阅读处理运行时更改。这正是我说的。谢谢维宾。但是我想避免使用这个。此外,我只想在一段时间内处理配置更改,如果可以的话,我找不到比这更简单的解决方案。通过这样做,我的应用程序到目前为止没有遇到任何问题。所以,我接受这个答案。谢谢。