我有一个简单的Android应用程序,只有一个Activity。此活动下载一个小型XML文件并将内容显示给用户。目前,我在活动的onStart
方法中开始下载。
据我了解,当设备方向发生变化时,活动会被销毁并重新创建。因此,当用户轮换我的应用程序时,将再次下载XML文件。我希望该应用程序只下载一次文件,因为它每天不会改变超过几次。因此,我希望保留下载的数据,以便在设备方向发生变化时重新使用本地数据。 Android中保留数据的理想对象是什么?
在iOS上我会使用AppDelegate
下载一次数据并保留它。然后,显示数据的viewController可以重新使用本地数据,如果它被销毁并重新创建。
答案 0 :(得分:26)
您必须创建自己的Application子类并在AndroidManifest.xml中指定它。 之后,将创建此类的新实例,并可在整个应用程序中访问该实例。
示例:
<强>的Manifest.xml 强>
<application name="YourApp">
<强> YourApp.java 强>
class YourApp extends Application {
private String yourState;
public void setState(String state){
yourState = state;
}
public String getState(){
return yourState;
}
}
<强> YourActivity.java 强>
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();
}
}
答案 1 :(得分:1)
您应该创建一个模型对象(您自己的类)来保留iOS和Android上的数据。 IMHO。
答案 2 :(得分:1)
使您的主类实现ProcessLifecycleObserver
。
这与iOS中的AppDelegate等效,因为它会在应用进程的基础上“总结” onCreate
,onResume
之类的活动处理程序。
https://developer.android.com/reference/android/arch/lifecycle/ProcessLifecycleOwner
答案 3 :(得分:0)
我假设您已经看过这个页面:
http://developer.android.com/guide/topics/data/data-storage.html#pref
根据XML文件中的数据类型(如果它是相当简单的数据),使用“共享首选项”可能是一种简单的方法。您可以在需要时从XML重写新数据,同时仍然可以从共享首选项中使用它。