1

目前我正在开发一个使用登录活动的android应用程序,一旦用户登录,一个主要活动。应用程序使用后台服务(IntentService)在用户登录时与服务器进行通信。然后该服务将获取的用户详细信息存储在数据库中,这样用户就不需要在每次启动时登录应用程序。

一旦用户进入主活动,活动就会通过服务从服务器获取一些数据。然后(以编程方式)在屏幕上显示该数据。我认为这与(众所周知的)Wordfeud 应用程序的工作方式相当。首先它让您登录,然后从服务器获取您正在玩的游戏,然后显示它们。

我的问题是,如果我旋转屏幕,主要活动将被破坏并重新启动,从而导致再次调用 oncreate() 函数。在我目前的设计中,这意味着再次从服务器获取数据,这是非常不必要的。如果用户关闭了应用程序并在以后再次开始使用它,我只希望再次获取数据。

我想知道解决这个问题的最佳主意是什么?最简单的方法是禁止屏幕旋转,但我认为这对用户不太友好。另一种方法是在应用程序与服务器通信以登录用户时获取所有数据,并在屏幕上添加一个重新加载/获取按钮,以便用户可以手动获取数据。这种方法的缺点是,如果用户在几个小时后重新打开应用程序,数据可能已经过时。这也不是那么用户友好。

也许对于这个问题还有其他我不知道的解决方案,比如在屏幕旋转时绕过(部分) oncreate() 函数的能力或类似的东西。

我很好奇是否有解决方案,如果有,那会是什么!

4

5 回答 5

1

看看Forcing Android to not redraw activity onorientation change。如果您需要在旋转时调整任何内容,您可以覆盖Activity.onConfigurationChanged方法。

要在用户返回应用程序时重新获取数据,请覆盖 onResume 方法并将您的逻辑放在那里。熟悉Activity 生命周期非常有用。

于 2013-09-23T12:06:21.013 回答
0

尝试android:configChanges="orientation|keyboardHidden|screenSize"在 android-manifest 中使用

注意:从 Android 3.2(API 级别 13)开始,当设备在纵向和横向之间切换时,“屏幕尺寸”也会发生变化。因此,如果您想防止在为 API 级别 13 或更高级别(由minSdkVersionandtargetSdkVersion属性声明)开发时由于方向更改而导致运行时重新启动,则除了“orientation”值之外,还必须包含“screenSize”值。也就是说,您必须声明android:configChanges="orientation|screenSize"。但是,如果您的应用程序以 API 级别 12 或更低级别为目标,那么您的 Activity 始终会自行处理此配置更改(此配置更改不会重新启动您的 Activity,即使在 Android 3.2 或更高版本的设备上运行时也是如此)。

来源:文档

因此,如果您的应用程序针对API 13 及更高版本,还要添加“|screenSize”configChanges

于 2013-09-23T12:21:59.010 回答
-1

您应该在清单中添加如下内容:

<activity android:name=".activity.YourActivity" android:configChanges="orientation"/>

然后在方向更改时,您的活动将不会重新启动 - 不会调用 onCreate,但您可以使用方法处理方向更改事件onConfigurationChanged(Configuration newConfig)

于 2013-09-23T12:09:49.220 回答
-1

试试这种方式和我一起工作

<activity
        android:name="yourActivity"
        android:configChanges="keyboardHidden|orientation|screenSize"/>
于 2013-09-23T12:16:28.287 回答
-1

当您旋转手机时,会再次调用活动的 oncreate()。为了克服这个问题,在清单活动标签中添加这一行

android:configChanges="orientation"

然后稍后在您的活动中覆盖 onConfigurationChanged。然后现在运行您的应用程序,当您旋转屏幕时将不会调用 oncreate,因为 onConfigurationChanged 将被调用。

我认为这可能会解决您的问题

于 2013-09-23T12:06:37.723 回答