【问题标题】:Store application global data存储应用程序全局数据
【发布时间】:2011-08-09 06:13:04
【问题描述】:

嗨 在整个应用程序中存储全局对象/实例的最佳方式是什么?

【问题讨论】:

  • 存储是什么意思?保留数据还是只想在应用程序生命周期内访问它们?
  • 我想在应用程序生命周期内访问它们
  • 你可以使用共享首选项和 onDestroy() 清除所有首选项变量
  • @hotveryspicy 那么应用程序上下文呢?我认为共享偏好很慢
  • 我不知道,但另一种方法是采用静态变量

标签: android


【解决方案1】:

这是我用来在应用程序上下文中存储String 的以下代码。

我上课GlobalVariable.java

import android.app.Application;

public class GlobalVariable extends Application 
{
      private String myState;

      public String getState()
      {
        return myState;
      }//End method

      public void setState(String s)
      {
        myState = s;
      }//End method
}//End Class

在 .Manifest 我添加以下代码

<application  android:icon="@drawable/icon" android:label="@string/app_name" android:name="GlobalVariable">

我想设置字符串值的地方我使用下面的代码

GlobalVariable appState = ((GlobalVariable)getApplicationContext());
appState.setState("Testing");

& 我想在哪里检索我使用的数据

GlobalVariable appState = ((GlobalVariable)getApplicationContext());
appState.getState();

【讨论】:

  • 对象(比如 A 类)怎么样
  • 请看我之前的帖子stackoverflow.com/questions/5726095/…
  • @Harikrishnan R,我使用相同的过程添加了 A 类的对象。
  • 这对于 ICS 及更高版本的开发人员设置设置为保持单一活动将无法完美运行。如果您从最近的应用程序列表重新启动应用程序,它将正常工作,如果从应用程序重新启动,数据将重置为默认值。有什么办法可以解决这个问题?
  • 在 Application 对象中存储数据弊大于利 - 当应用程序进入后台并且系统将其杀死以回收资源时,重新打开它后,Application 对象将从头开始重新创建(不持久)。所以 myState 将为空。
【解决方案2】:

扩展 Application 对象并将对全局对象的引用存储在其中。

【讨论】:

【解决方案3】:

【讨论】:

  • Android 会在应用处于后台时清除单例对象
  • 据我所知这是错误的。只有当您的应用程序被杀死时,它才会清除它们。然后您的进程在后台,但如果“暂停”对象无法被杀死,则 Activity 处于状态。
  • 您是否需要在不同的应用程序运行之间保存对象实例的状态?
猜你喜欢
  • 1970-01-01
  • 2010-11-17
  • 2012-03-13
  • 1970-01-01
  • 1970-01-01
  • 2016-09-10
  • 2016-05-18
  • 2011-05-11
  • 1970-01-01
相关资源
最近更新 更多