Android 如何将Google API密钥字符串缓存到内存中?

Android 如何将Google API密钥字符串缓存到内存中?,android,google-api,Android,Google Api,我正在开发一个Android应用程序,它使用Google Places API 为了不让GoogleAPI密钥出现在应用程序代码中,我从我自己的经过身份验证的API服务器获取它,并在应用程序的许多地方找到它所需要的 将其存储/缓存到内存的最佳方式是什么 我明白,仅仅使用单例将被垃圾收集。 扩展应用程序类并向其中添加方法是一种好方法吗? 还有什么我可以考虑的吗?< P>使用 要保存到首选项,请执行以下操作: PreferenceManager.getDefaultSharedPreferences

我正在开发一个Android应用程序,它使用Google Places API

为了不让GoogleAPI密钥出现在应用程序代码中,我从我自己的经过身份验证的API服务器获取它,并在应用程序的许多地方找到它所需要的

将其存储/缓存到内存的最佳方式是什么

我明白,仅仅使用单例将被垃圾收集。 扩展
应用程序
类并向其中添加方法是一种好方法吗? 还有什么我可以考虑的吗?

< P>使用

要保存到首选项,请执行以下操作:

PreferenceManager.getDefaultSharedPreferences(context).edit().putString("MYAPIKEY",
      "myStringToSave").commit();  
要获取存储的首选项,请执行以下操作:

PreferenceManager.getDefaultSharedPreferences(context).getString("MYAPIKEY",
     "defaultStringIfNothingFound"); 
上下文就是你的上下文

一旦您从服务器获得它,请保存它。然后,您可以随时访问它。卸载应用程序当然会删除其内容。否则它是持久的。

使用

要保存到首选项,请执行以下操作:

PreferenceManager.getDefaultSharedPreferences(context).edit().putString("MYAPIKEY",
      "myStringToSave").commit();  
要获取存储的首选项,请执行以下操作:

PreferenceManager.getDefaultSharedPreferences(context).getString("MYAPIKEY",
     "defaultStringIfNothingFound"); 
上下文就是你的上下文


一旦您从服务器获得它,请保存它。然后,您可以随时访问它。卸载应用程序当然会删除其内容。否则它是持久的。

虚拟机不能垃圾收集类仍然可以访问的字符串引用,所以我不明白为什么不能将字符串保存在单例中并将其作为静态引用存储。您也可以像末日骑士建议的那样将其存储在共享首选项中,但不会缓存在内存中。共享首选项作为XML文件存储在持久性存储中(与RAM上可用的值相对)。从中检索值


也许你需要两者的结合。将值存储在共享首选项中,然后在应用程序启动时将其缓存在内存中。我不知道PreferenceManager本身是否在内存中有某种缓存机制。

虚拟机无法垃圾收集类仍然可以访问的字符串引用,因此我不明白为什么不能将字符串保留在单例中并将其作为静态引用存储。您也可以像末日骑士建议的那样将其存储在共享首选项中,但不会缓存在内存中。共享首选项作为XML文件存储在持久性存储中(与RAM上可用的值相对)。从中检索值


也许你需要两者的结合。将值存储在共享首选项中,然后在应用程序启动时将其缓存在内存中。我不知道PreferenceManager本身是否在内存中有某种缓存机制。

这不是处理API密钥的安全方法。我想在需要的时候从我的服务器上获取它,并将其作为字符串保存在内存中以备以后使用。@GalBen Haim我想你没有完全理解我的答案。您可以从服务器安全地获取API密钥,然后像这样存储它。它只能由您的应用程序访问。为了让您更加安心,您甚至可以在存储到首选项管理器之前使用自定义encript/decript。这只是一种创建安全、持久存储字符串的方法,这正是您所需要的。这不会被垃圾收集。但是如果密钥被持久存储,任何人都可以得到它,我想的是只将它保存在内存中,并在需要时获取它,而不是在内存中。@GalBen Haim如果用户确定,他们可以得到任何东西。默认情况下,SharedPref不是世界可读的,只能使用应用程序UID读取。每次GCed时使用singleton和regrab,或者存储在sharedPrefs和encript/decript中以增加安全性。这不是处理API密钥的安全方法。我想在需要的时候从我的服务器上获取它,并将其作为字符串保存在内存中以备以后使用。@GalBen Haim我想你没有完全理解我的答案。您可以从服务器安全地获取API密钥,然后像这样存储它。它只能由您的应用程序访问。为了让您更加安心,您甚至可以在存储到首选项管理器之前使用自定义encript/decript。这只是一种创建安全、持久存储字符串的方法,这正是您所需要的。这不会被垃圾收集。但是如果密钥被持久存储,任何人都可以得到它,我想的是只将它保存在内存中,并在需要时获取它,而不是在内存中。@GalBen Haim如果用户确定,他们可以得到任何东西。默认情况下,SharedPref不是世界可读的,只能使用应用程序UID读取。每次GCed时使用singleton和regrab,或者存储在sharedPrefs和encript/decript中以增加安全性。这样做的全部目的是安全地处理API密钥。我想随时从我的服务器获取它,并将其作为字符串保存在内存中,以供以后使用。简单地将这个字符串动态存储在一个单独的文件中不会被垃圾收集吗?其全部目的是安全地处理API密钥。我想随时从我的服务器获取它,并将其作为字符串保存在内存中,以供以后使用。简单地将这个字符串动态存储在一个单独的文件中不会被垃圾收集吗?