我正在开发一个相当复杂的Android应用程序,它需要相当多的关于应用程序的数据(我想总共大约500KB --对于移动设备来说是不是很大?)。据我所知,应用程序中的任何方向更改(更准确地说,在活动中)都会导致活动的完全破坏和重新创建。根据我的发现,Application类不具有相同的生命周期(即,无论出于何种目的,它都是实例化的)。将状态信息存储在应用程序类中,然后从活动中引用它是否有意义,或者由于移动设备上的内存限制,这通常不是“可接受的”方法吗?我真的很感谢在这个话题上的任何建议。谢谢!
发布于 2010-11-18 04:41:02
我不认为500kb会是一个大问题。
您所描述的正是我如何解决在活动中丢失数据的问题。我在Application类中创建了一个全局单例,并且能够从我使用的活动中访问它。
如果要大量使用数据,则可以在全局单例中传递数据。
public class YourApplication extends Application
{
public SomeDataClass data = new SomeDataClass();
}
然后在任何活动中通过以下方式调用它:
YourApplication appState = ((YourApplication)this.getApplication());
appState.data.UseAGetterOrSetterHere(); // Do whatever you need to with the data here.
我在“全局单例”一节中对其进行here in my blog post讨论。
发布于 2010-11-18 05:36:01
如果您想在活动之外访问“全局单例”,并且不想通过所有涉及的对象传递Context
来获得单例,那么您可以只在应用程序类中定义一个静态属性,该属性保存对自身的引用。只需在onCreate()
方法中初始化属性即可。
例如:
public class ApplicationController extends Application {
private static ApplicationController _appCtrl;
public static ApplicationController getAppCtrl()
{
return _appCtrl;
}
}
因为Application
的子类也可以获取资源,所以您可以在定义静态方法时简单地访问它们,该静态方法返回它们,如下所示:
public static Resources getAppResources()
{
return _appCtrl.getResources();
}
但是在传递对avoid memory leaks的上下文引用时要非常小心。
发布于 2010-11-18 06:03:48
戴夫,这是什么数据?如果它是属于整个应用程序的通用数据(例如:用户数据),则扩展application类并将其存储在那里。如果数据与活动相关,则应该使用onSaveInstanceState和onRestoreInstanceState处理程序在屏幕旋转时持久化数据。
https://stackoverflow.com/questions/4208886
复制相似问题