在上一篇博客中介绍到,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. php对业务平台接口调用的封装格式

    1.封装类示例:E:\html\pim\php_mcloud_cas\util\UmcPlatform.class.php <?php class Util_UmcPlatform{ const ...

  2. leetcode914

    public class Solution { public bool HasGroupsSizeX(int[] deck) { var len = deck.Length; ; i <= le ...

  3. “数据提供程序或其他服务返回 E_FAIL 状态”

    “数据提供程序或其他服务返回 E_FAIL 状态” 的问题 ADO 连接SQL SERVER

  4. margin+absolute布局:右栏固定主内容自适应 demo

    margin+absolute布局:右栏固定主内容自适应 demo 头部 Aside侧边栏区域 Main主内容区域 底部 #demo{width:80%;margin:auto;height:300p ...

  5. MySQL数据库篇之数据类型

    主要内容: 一.数值类型 二.日期类型 三.字符串类型 四.枚举类型与集合类型 1️⃣ 数值类型 1.整数类型:tinyint  smallint  mediumint  int  bigint 作用 ...

  6. css实现类似heigth:100%的方法

    1. 效果 2. 代码 2.1. Html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &q ...

  7. 10 华电内部文档搜索系统 search02

    搜索项目并不是一个很大的项目,在实际项目中往往是作为子项目和别的项目集成在一起的.比如说和OA项目集成在一起,作为另外一个项目的子系统来使用.搜索项目的功能并不复杂. 整个项目是文档搜索项目,如题:企 ...

  8. 大话CNN

    这几年深度学习快速发展,在图像识别.语音识别.物体识别等各种场景上取得了巨大的成功,例如AlphaGo击败世界围棋冠军,iPhone X内置了人脸识别解锁功能等等,很多AI产品在世界上引起了很大的轰动 ...

  9. CS4.1 RPM打包函数分析

    shell举例说明:脚本名称叫test.sh 入参三个: 1 2 3运行test.sh 1 2 3后$*为"1 2 3"(一起被引号包住)$@为"1" &quo ...

  10. 29-中国剩余定理CRT

    https://blog.csdn.net/u010468553/article/details/38346195 中国剩余定理[数论] 2014年08月02日 12:55:59 阅读数:2351 中 ...