在上一篇博客中介绍到,Android-Intent意图传递数据,能够传递基本数据类型系列,能够传递对象(需要序列化),等操作;

但是如果要传递 List<T>,这种类型的数据,就不能通过Intent来传递来,还有另外的方式来传递,就是自定义一个会话存储(取名:IntentSession)

IntentSession这种方式传递数据,可以通用,很灵活,能够传递任何类型的数据

IntentSession封装:

package liudeli.activity.intent;

import java.util.WeakHashMap;

public class IntentSession {

    /**
* 使用懒汉式单例模式
*/ private static IntentSession intentSession = null; public static IntentSession getInstance() {
if (null == intentSession) { // 加入同步锁
synchronized (IntentSession.class) { // 为来解决CPU极少概率,时差性,再判断一次
if (null == intentSession) {
intentSession = new IntentSession();
}
}
}
return intentSession;
} /**
* 为什么要用WeakHashMap
* HashMap的Key是对实际对象对强引用
* WeakHashMap的特点是弱引用:当gc线程发现某个对象只有弱引用指向它,就会被消耗并回收
*/
private WeakHashMap<String, Object> weakHashMap = new WeakHashMap<>(); /**
* 保存数据
* @param key
* @param obj
*/
public void put(String key, Object obj){
if (weakHashMap.containsKey(key)) {
weakHashMap.remove(key);
}
weakHashMap.put(key, obj);
} /**
* 获取数据后删除
* @param key
* @return
*/
public Object getRemove(String key) {
if (weakHashMap.containsKey(key)) {
return weakHashMap.remove(key);
}
clear();
return null;
} /**
* 获取数据但不删除
* @param key
* @return
*/
public Object get(String key){
if(weakHashMap.containsKey(key)){
return weakHashMap.get(key);
}
return null;
} /**
* 清除
*/
public void clear() {
weakHashMap.clear();
} /**
* 结束自身 自杀
*/
public void oneseifExit() {
intentSession = null;
System.gc();
}
}

在OuterActivity 启动 OneActivity,绑定数据:

     Intent intent = new Intent(this, TwoActivity.class);

        // 数据
List<String> list = new ArrayList<>();
list.add("黄家驹");
list.add("张雨生");
list.add("陈百强"); // 使用自定义的IntentSession 来绑定数据
IntentSession.getInstance().put("listData", list); startActivity(intent);

在OneActivity接收,接收IntentSession数据:

     TextView  tvInfo = findViewById(R.id.tv_info);

        // 得到绑定好的数据,并删除数据
List<String> listData = (List<String>) IntentSession.getInstance().getRemove("listData");
tvInfo.setText("" + listData.toString()); // 清空IntentSession
IntentSession.getInstance().oneseifExit();

Android-自定义IntentSession来传递数据的更多相关文章

  1. Xamarin Android 中Acitvity如何传递数据

    在xamarin android的开发中,activity传递数据非常常见,下面我也来记一下在android中activity之间传递数据的几种方式, Xamarin Android中Activity ...

  2. Android 消息广播Intent传递数据

    1.创建布局文件activity_broadcast.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk ...

  3. Android 使用剪切板传递数据

    使用剪切板传递数据,可以传递简单的数据,也可以传递可序列化的对象. 首先来个简单点吧. 首先在,mainActivity.xml文件中加入一个button按钮 private Button butto ...

  4. android 使用静态变量传递数据

    使用静态变量传递数据之通用方式. 测试应用:当前页面点击button传递数据到一个新的页面显示在textview中. 首先在,mainActivity.xml文件中加入一个button按钮 <B ...

  5. Android学习之Intent传递数据

    Intent在Activity中的作用主要是有两个: 1.启动目标Activity 2.传递数据 Intent在传递数据时分两种情况:向下一个Activity传递数据和从下一个Activity返回数据 ...

  6. [Android] Android 最全 Intent 传递数据姿势

    我们都是用过 Intent,用它来在组件之间传递数据,所以说 Intent 是组件之间通信的使者,一般情况下,我们传递的都是一些比较简单的数据,并且都是基本的数据类型,写法也比较简单,今天我在这里说的 ...

  7. Android Activity和Fragment传递数据

    1.Activity与Activity传递数据 UserLoginActivity.java: Intent welcomePage = new Intent(); Bundle dataBundle ...

  8. WebView之js调用Android类的方法传递数据

    1,具体的思路如下: 在android中写一个Activity,里面写一个webview,这个webview加载本地的一个html文件,显示这个网页,这个网页包括一个用户名和密码的输入框和两个按钮(只 ...

  9. Android基础 -- Activity之间传递数据(bitmap和map对象)

    原文:http://blog.csdn.net/xueerfei008/article/details/23046341 做项目的时候需要用到在2个activity之间传递一些数据,之前做的都是些字符 ...

随机推荐

  1. apt-get使用国内镜像源

    apt-get 1.复制原文件备份(万一弄坏源文件可恢复) sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak 2.编辑源列表文件 sudo ...

  2. mysql 锁 事务隔离级别

    主题 最近在看mysql相关的书籍.实验了一些内容.分享一下,主要是关于事务隔离级别(read-committed和repeatable-read)和锁相关的. 很多网上文章上都能搜索到 read-c ...

  3. 【308】Python os.path 模块常用方法

    参考:Python os.path 模块 参考:python3中,os.path模块下常用的用法总结 01   abspath 返回一个目录的绝对路径. 02   basename 返回一个目录的基名 ...

  4. Docker入门命令备份

    1.安装Docker curl -sSL https://get.docker.com/ | sh 2.将当前用户加入Docker用户组,这样就不用每次执行docker 命令时加上sudo了 3.查看 ...

  5. kubenetes dns

    E0228 07:32:28.912833       1 reflector.go:201] k8s.io/dns/pkg/dns/dns.go:147: Failed to list *v1.En ...

  6. swarmkit

    SwarmKit是用于在任何规模上编排分布式系统的工具包. 它包括节点发现的原语,基于raft的共识,任务调度等. 其主要优点是: 分布式:SwarmKit使用raft共识算法来协调,不依赖单一故障点 ...

  7. ShaderLab内置变量

    [ShaderLab内置变量]

  8. Creating Procedural Textures

    [Creating Procedural Textures] 由程序主生贴图,然后设置给Material.首先定义需要的数据: 在Start方法中完成初始化,注意设置的是_MainTex. 实现Gen ...

  9. Git 将本地代码推到 Coding 远程仓库

    1 首先创建文件夹,将要推的项目文件夹拷贝过来,进入文件夹 右键 Git Bash Here 输入以下代码 把这个目录变成git管理的仓库 git init 2 把文件添加到版本库中,使用命令 git ...

  10. 【UVA1515 算法竞赛入门指南】 水塘【最小割】

    题意: 输入一个h行w列的字符矩阵,草地用“#”表示,洞用"."表示.你可以把草改成洞,每格花费为d,也可以把洞填上草,每格花费为f.最后还需要在草和洞之间修围栏,每条边花费为b. ...