18

我有一个带有一个 Activity 的简单 Android 应用程序。此活动下载一个小的 XML 文件并向用户显示内容。目前我在 Activity 的onStart方法中开始下载。

据我了解,当设备方向发生变化时,活动会被销毁并重新创建。因此,当用户旋转我的应用程序时,会再次下载 XML 文件。我希望该应用程序只下载一次文件,因为它每天更改的次数不会超过几次。因此,我想要一些对象来保留下载的数据,以便在设备方向改变时可以重新使用本地数据。Android中保留数据的理想对象是什么?

在 iOS 上,我会使用AppDelegate下载数据一次并保留它。然后,显示数据的 viewController 可以在本地数据被销毁和重新创建时重新使用它。

4

4 回答 4

31

您必须创建自己的 Application 子类并在 AndroidManifest.xml 中指定它。之后,将创建此类的新实例,并且可以在整个应用程序中访问它。

例子:

清单.xml

<application name="YourApp"> 

你的应用程序.java

public class YourApp extends Application {
    private String yourState;
 
    public void setState(String state){
        yourState = state;
    }
    public String getState(){
        return yourState;
    }
 }
 

你的活动.java

 public class YourActivity extends Activity {
    @Override
    public void onCreate(Bundle bundle){
        YourApp appState = ((YourApp)getApplicationContext());// you can use getApplication() as well in the activity
        String state = appState.getState();
    }
 }

有关应用程序的更多信息

于 2013-09-27T09:12:54.990 回答
2

让你的主类实现ProcessLifecycleObserver

它相当于 iOS 中的 AppDelegate,因为它在应用程序进程的基础上“总结”了活动处理程序onCreate,如 .onResume

https://developer.android.com/reference/android/arch/lifecycle/ProcessLifecycleOwner

于 2018-12-16T17:13:50.127 回答
1

您应该创建一个模型对象(您自己的类)来保留 iOS 和 android 上的数据。恕我直言。

于 2012-08-06T14:57:31.577 回答
0

我假设你已经看过这个页面:

http://developer.android.com/guide/topics/data/data-storage.html#pref

根据 XML 文件中的数据类型(如果它是相当简单的数据),使用“共享首选项”可能是一种简单的方法。您可以在需要时从 XML 重写新数据,同时仍然能够从共享首选项中使用它。

于 2012-08-06T15:05:19.620 回答