【问题标题】:Dynamic Global Configuration Variables in androidandroid中的动态全局配置变量
【发布时间】:2012-01-25 22:49:03
【问题描述】:

我是安卓开发新手。 我在 android 上创建了一个应用程序,但在我的应用程序在后台长时间睡眠后我面临崩溃。我尝试了单例和子应用程序,但它们都导致我在长时间睡眠后崩溃。

我要保存的配置是其中许多对象的列表。这些配置应该可以在整个应用程序中访问。

任何想法如何处理这个?我搜索了寻找答案的网站,但没有运气。因为共享首选项仅适用于字符串、布尔值、整数和浮点数......而且我的目标是 android 2.1 及更高版本。

有什么简单的程序可以避免我改变整个应用程序机制吗?

谢谢

【问题讨论】:

  • 您可以使用 sqlite 数据库将所有对象存储在一个表中,
  • 您必须以一种或另一种方式保存此信息。 File、Sqlite 和 SharedPreferences 是标准选项,所有这些都在网络上提供了示例代码
  • 是的,如果我使用 sqlite 或对象的共享首选项包含简单的变量会很容易,但是如果我的对象中有一个列表呢?然后我需要为此设计一个复杂的数据库,这就是为什么要远离数据库或共享偏好。我现在正在做的事情是填写 stefan 的帖子,并检查数据库是否为空,然后我将他发送回初始屏幕以重新初始化数据......我认为这对于登录也很有用。我在 java 方面的经验是有限的,因为我曾经在 web 应用程序 php.so 中工作过。所以它对我来说有点混乱:)

标签: android android-ndk local-storage sharedpreferences


【解决方案1】:

我在 Android 中使用 Singletons 时遇到过不好的经历。问题是,如果应用程序被销毁但 jvm 不是单例,则单例的寿命可能比应用程序长类加载器)。这是否解释了您的应用程序的行为。

一种可能的解决方案是使用 Android 创建的 Application 实例。它的生命周期由 android 管理,您可以在 onCreate() 中管理状态,... 由于 API 级别 14,还有活动生命周期回调。在这里查看更多信息:http://developer.android.com/reference/android/app/Application.html#registerActivityLifecycleCallbacks%28android.app.Application.ActivityLifecycleCallbacks%29

如果我需要一个全局变量并且数据库或共享首选项不是合适的解决方案,我通常使用 Application 实例来存储状态。可以通过调用获取初始化的Application或Service实例

(MyApplication) this.getApplication();

在您的活动或服务中,例如在 onCreate() 中。您在 onCreate() 方法中初始化 MyApplication 实例(它扩展了 Application)。

【讨论】:

  • 好吧,这很有帮助,因为我厌倦了很多解决方案,我失去了合适的解决方案。我正在逃避将我的数据保存到数据库中,我的应用程序配置是对象和对象列表,如下所示: public class MainObjs extends Application { private List Weather=null;私有列表 SearchResult=null;私有列表 目录=空;并且每个都有setter和getter,有没有参考如何使用(MyApplication)this.getApplication();使用我的动态对象?如何访问以及如何设置它们?
  • 感谢您的回复 stefan,这正是我正在做的事情,但是应用程序内部的数据是动态填充的,当应用程序休眠时,它们会被清除空异常错误,我猜是目录设置为null,我应该重新初始化它们吗?这是对的还是我想念它?
  • 对不起,我不明白这个问题。应用程序休眠时,应用程序实例中的数据不会被触及。
  • 好吧,这就是数字的情况:1-splash 活动是配置了应用程序“A”实例的主要活动,应用程序对象“A”具有等于 null 的对象集。 2-在创建时启动页面,从网络浏览器获取数据并填充应用程序对象“A”中的对象,当用户浏览应用程序并将主应用程序发送到后台睡眠时,一旦他重新启动它,它崩溃是因为它在应用程序对象“A”中找不到数据,因为它已被杀死。
  • 你说“重新启动”;所以活动不仅发送到后台,而且当用户浏览其他应用程序的活动时,应用程序可能会停止,对吗?当应用程序的每个活动/服务都被销毁时,应用程序对象不能保证无限期地存在。在这种情况下,我建议使用数据库或 SharedPreferences。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-18
  • 1970-01-01
  • 2020-06-25
  • 1970-01-01
  • 1970-01-01
  • 2018-05-17
  • 1970-01-01
相关资源
最近更新 更多