当前位置: 代码迷 >> Android >> Android 封存全局数据
  详细解决方案

Android 封存全局数据

热度:22   发布时间:2016-05-01 19:14:19.0
Android 保存全局数据

最近遇到这样一个问题。就是想在这个Application中共享一些数据。比如某一个Activity,点击Menu中的某一个Item,这个Item需要弹出一个Dialog,如图..

? ? ?这个是通过我程序设定一个默认播放器,这样从我这个程序打开视频的时候可以直接走我设定的播放器,就绕过了隐式Intent的选择过程。但是我这个设定的值需要在全局使用,不管哪个Activity,都有可能要知道我设定的值,但是我又不想让程序每次都去读Shared Preference,读文件,影响效率,所以我得让这个数据全局共享起来...

?

怎么达到了...

? ? 做法一:在当前Activity中使用public 的静态变量。当然这样可以达到目的,但出现的问题就是代码混乱,别人只要知道这个值而已,但却需要你写的这个类的类名。

? ? 做法二:用一个Utilities.java 类,来全局共享所有需要共享的数据。这个做法第一种做法的一种提纯,在形成一定的代码标准推行后,可以达到我们的效果。可惜这种做法在目前的团队无法推广,而且它还有个致命的缺点,就是线程不安全,当然加锁可以解决问题。(这个办法学自launcher2 中的做法)。

? ? 做法三:在我们做java web的时候,也由这种问题,当然web容器有很好的解决方案,如存在session或者application域中,一想,网上还有个哥们已经有贴了,直接贴过来(希望大家包涵)

?

1、自定义Application

?

?

Java代码?
  1. public?class?DemoApplication?extends?Application?{??
  2. ????private?HashMap<String,?Object>?map?=?new?HashMap<String,?Object>();??
  3. ??????
  4. ????public?void?put(String?key,Object?object){??
  5. ????????map.put(key,?object);??
  6. ????}??
  7. ??????
  8. ????public?Object?get(String?key){??
  9. ????????return?map.get(key);??
  10. ????}??
  11. }??

?

2、修改AndroidManifest.xml文件:

Xml代码?
  1. <application?<strong><em>android:name="DemoApplication"</em></strong>?android:icon="@drawable/app"?android:label="@string/app_name">??

?注意黑色粗体字标识的内容,指定程序使用我们自己定义的Application。

?

3、使用:

在其中一个activity中将数据保存到application中定义的map中

?

Java代码?
  1. DemoApplication?app?=?(DemoApplication)getApplication();??
  2. app.put("key",?"this?is?a?test!");??

?

然后在另一个activity中去获取数据:

Java代码?
  1. DemoApplication?app?=?(DemoApplication)getApplication();??
  2. String?value?=(String)app.get("key");??
  3. Toast.makeText(this,?value,?Toast.LENGTH_LONG).show(); ?
这样的话,代码看起来就整齐美观些,但是还是有问题,应为我不希望我们配Manifest 的时候需要用自定义的Application类,配置,有点麻烦。如果哪位有好的方法,留言,也好让大家学习一下。
<!--EndFragment-->
  相关解决方案