首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用Android Application类持久化数据

使用Android Application类持久化数据
EN

Stack Overflow用户
提问于 2010-11-18 04:34:13
回答 5查看 73.1K关注 0票数 112

我正在开发一个相当复杂的Android应用程序,它需要相当多的关于应用程序的数据(我想总共大约500KB --对于移动设备来说是不是很大?)。据我所知,应用程序中的任何方向更改(更准确地说,在活动中)都会导致活动的完全破坏和重新创建。根据我的发现,Application类不具有相同的生命周期(即,无论出于何种目的,它都是实例化的)。将状态信息存储在应用程序类中,然后从活动中引用它是否有意义,或者由于移动设备上的内存限制,这通常不是“可接受的”方法吗?我真的很感谢在这个话题上的任何建议。谢谢!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-11-18 04:41:02

我不认为500kb会是一个大问题。

您所描述的正是我如何解决在活动中丢失数据的问题。我在Application类中创建了一个全局单例,并且能够从我使用的活动中访问它。

如果要大量使用数据,则可以在全局单例中传递数据。

代码语言:javascript
复制
public class YourApplication extends Application 
{     
     public SomeDataClass data = new SomeDataClass();
}

然后在任何活动中通过以下方式调用它:

代码语言:javascript
复制
YourApplication appState = ((YourApplication)this.getApplication());
appState.data.UseAGetterOrSetterHere(); // Do whatever you need to with the data here.

我在“全局单例”一节中对其进行here in my blog post讨论。

票数 134
EN

Stack Overflow用户

发布于 2010-11-18 05:36:01

如果您想在活动之外访问“全局单例”,并且不想通过所有涉及的对象传递Context来获得单例,那么您可以只在应用程序类中定义一个静态属性,该属性保存对自身的引用。只需在onCreate()方法中初始化属性即可。

例如:

代码语言:javascript
复制
public class ApplicationController extends Application {
    private static ApplicationController _appCtrl;

    public static ApplicationController getAppCtrl()
    {
         return _appCtrl;
    }
}

因为Application的子类也可以获取资源,所以您可以在定义静态方法时简单地访问它们,该静态方法返回它们,如下所示:

代码语言:javascript
复制
public static Resources getAppResources()
{
    return _appCtrl.getResources();
}

但是在传递对avoid memory leaks的上下文引用时要非常小心。

票数 6
EN

Stack Overflow用户

发布于 2010-11-18 06:03:48

戴夫,这是什么数据?如果它是属于整个应用程序的通用数据(例如:用户数据),则扩展application类并将其存储在那里。如果数据与活动相关,则应该使用onSaveInstanceState和onRestoreInstanceState处理程序在屏幕旋转时持久化数据。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4208886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档