Android Studio中如何让两个类共用同一个HashMap无需重复创建
解决方案
以下是适配Android Activity场景的可落地方案:
方案1:使用自定义全局Application持有共享实例
Android应用生命周期内只会存在一个Application实例,天然支持全局数据共享,是平台原生推荐的全局数据存储方式。
- 第一步:创建自定义Application类,声明并暴露HashMap实例
public class MyApp extends Application { // 全局共享的HashMap实例 private HashMap<String, String> testMap = new HashMap<>(); public HashMap<String, String> getTestMap() { return testMap; } }
- 第二步:在
AndroidManifest.xml的application标签中注册自定义Application
<application android:name=".MyApp" ...其余原有配置保持不变...> ...原有Activity注册内容... </application>
- 第三步:在两个Activity中访问同一个HashMap实例
第一个Activity中写入name:
第二个Activity中写入surname:// 获取全局Application实例后强转为自定义的MyApp类型 MyApp myApp = (MyApp) getApplication(); myApp.getTestMap().put("name", name);
最终上传数据时直接从MyApp myApp = (MyApp) getApplication(); myApp.getTestMap().put("surname", surname);myApp.getTestMap()获取完整集合即可。
方案2:创建独立的单例数据持有类
该方案和Application方案原理一致,优势是解耦全局数据和Application逻辑,更易维护扩展。
- 第一步:创建单例类持有HashMap
public class DataHolder { // 饿汉式单例初始化 private static final DataHolder INSTANCE = new DataHolder(); private HashMap<String, String> testMap = new HashMap<>(); // 私有构造禁止外部实例化 private DataHolder() {} public static DataHolder getInstance() { return INSTANCE; } public HashMap<String, String> getTestMap() { return testMap; } }
- 第二步:任意位置直接访问单例中的HashMap
第一个Activity写入:
第二个Activity写入:DataHolder.getInstance().getTestMap().put("name", name);DataHolder.getInstance().getTestMap().put("surname", surname);
注意事项
- 不要通过Intent传递HashMap来实现共享:Android会对Intent携带的序列化对象做拷贝,会生成新的HashMap实例,无法实现数据共通。
- 如果存在多线程同时操作HashMap的场景,建议替换为
ConcurrentHashMap避免并发异常。 - 全局存储的HashMap在应用进程被杀时会丢失数据,如果需要确保数据不丢失,可以在每次写入后同步缓存到SharedPreferences、本地数据库等持久化存储,最终上传时再读取合并。
- 如果HashMap不需要长期持有,上传完成后及时调用
clear()清空数据,避免不必要的内存占用。
内容的提问来源于stack exchange,提问作者Jack Stuart
相关产品推荐
相关产品推荐

