【问题标题】:Android - Load properties file on application launchAndroid - 在应用程序启动时加载属性文件
【发布时间】:2014-11-08 15:00:48
【问题描述】:

是否有一部分代码总是在应用程序启动时执行,无论活动如何,我们都可以访问上下文?

我的应用程序需要 api 密钥。我将它们存储在资产中的 .properties 文件中,并在每次需要加载它们时从context.getRessources().getAssets() 访问此文件。

key = getKey(getContext())

一旦成功访问一次,我希望有一个静态变量来存储它们。但是由于我不知道他们什么时候会第一次被访问,所以我需要做一些类似的事情

if(isKeySet()){
    key = getKey();
} else {
    setKey(getContext());
}

这并不理想,因为我仍然需要传递上下文。如果我可以确保始终执行代码的一部分(可以访问上下文),我可以在此处加载它们以及随后的每个调用

key = getKey();

【问题讨论】:

  • 将密钥放入由 SharedPreference static 加载的 xml 文件中,并将其加载到您的 Main Activity 中。首选项应该可以在任何需要的地方寻址。

标签: android properties launch android-context


【解决方案1】:

您可以使用 Android Application 类。它扩展了 Context,是一个存储全局应用程序状态的基类。

public class MyApplication extends Application
{
    private static MyApplication mSingleton;

    @Override
    public void onCreate()
    {
        super.onCreate();
        mSingleton = this;
    }

    public static MyApplication getInstance() {
        return mSingleton;
    }
}

androidManifest.xml中,需要在<application>中添加android:name="com.X.Y.Z.MyApplication"

现在,当您的应用启动时,它将启动 MyApplication.onCreate 方法。

调用super.onCreate() 后,您可以访问getApplicationContext() 并可以初始化您的单例。

【讨论】:

  • 关于这个的一些问题。我会让我的 KeyManager 扩展应用程序,并调用 new KeyManager().getKey() 来键入密钥。 | GetKey 将检查 mSingleton 是否为 !null,返回它,或者使用它的上下文初始化它 |当我在另一个活动中创建的 KeyManager 被垃圾收集时,mSingleton 会保留它的价值吗? (假设它是静态的)|这种情况是正确的,还是我误解了什么?
  • 没有。你会打电话给KeyManager.getInstance().getKey()。将只有一个对象mSingleton。它不会被垃圾收集,因为它是静态的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-24
  • 1970-01-01
  • 1970-01-01
  • 2013-06-06
  • 1970-01-01
相关资源
最近更新 更多