我正在开发一款相当复杂的Android应用程序,需要获取大量与该应用程序相关的数据(我认为总共约500KB - 这对移动设备来说算大吗?)。据我所知,在应用程序中的任何方向更改(在活动中更精确)都会导致完全销毁和重建该活动。根据我的调查结果,Application类没有相同的生命周期(即它在所有情况下都被实例化)。把状态信息存储在应用程序类中,然后从活动中引用它是否有意义,或者由于移动设备上的内存限制而通常不是“可接受”的方法? 我真的很感激关于这个主题的任何建议。谢谢!
我正在开发一款相当复杂的Android应用程序,需要获取大量与该应用程序相关的数据(我认为总共约500KB - 这对移动设备来说算大吗?)。据我所知,在应用程序中的任何方向更改(在活动中更精确)都会导致完全销毁和重建该活动。根据我的调查结果,Application类没有相同的生命周期(即它在所有情况下都被实例化)。把状态信息存储在应用程序类中,然后从活动中引用它是否有意义,或者由于移动设备上的内存限制而通常不是“可接受”的方法? 我真的很感激关于这个主题的任何建议。谢谢!
我认为500kb不会是一个大问题。
你描述的正是我解决在活动中数据丢失问题的方法。我在应用程序类中创建了一个全局单例,并能够从我使用的活动中访问它。
如果要经常使用数据,可以在全局单例中传递数据。
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.
我在我的博客文章中这里讨论了它,在“全局单例”部分下。
Application
实例的人是错误的。一开始,似乎Application
存在的时间和整个应用程序进程的存在时间一样长,但这是错误的假设。Application
实例)。Application
的成员就完全没问题了。Application
实例,但是除非您进行了持久化,否则不会保留您所依赖的静态数据。 - Vit Khudenkopublic class ApplicationController extends Application {
private static ApplicationController _appCtrl;
public static ApplicationController getAppCtrl()
{
return _appCtrl;
}
}
由于Application
的子类也可以获取资源,因此您可以在定义返回它们的静态方法时轻松访问它们,例如:
public static Resources getAppResources()
{
return _appCtrl.getResources();
}
但是在传递Context引用时,请非常小心,以避免内存泄漏。
Application
来做到这一点。你可以在任何类中声明一个静态成员变量来实现这个功能。 - David WasserDave,这是什么类型的数据?如果这是与整个应用程序相关的通用数据(例如:用户数据),那么请扩展Application类并将其存储在那里。如果该数据涉及到Activity,则应使用onSaveInstanceState和onRestoreInstanceState处理程序来在屏幕旋转时保持数据。
你实际上可以重写方向功能,以确保你的活动不被销毁和重新创建。请点击这里。
我知道这是一个非常老的问题,但使用Jetpack组件中的ViewModel是保留Activity旋转期间数据的最佳方式。
ViewModel类旨在以生命周期感知的方式存储和管理与UI相关的数据。ViewModel类允许数据在配置更改(如屏幕旋转)时保持不变。