Android-自定义IntentSession来传递数据
在上一篇博客中介绍到,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来传递数据的更多相关文章
- Xamarin Android 中Acitvity如何传递数据
在xamarin android的开发中,activity传递数据非常常见,下面我也来记一下在android中activity之间传递数据的几种方式, Xamarin Android中Activity ...
- Android 消息广播Intent传递数据
1.创建布局文件activity_broadcast.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk ...
- Android 使用剪切板传递数据
使用剪切板传递数据,可以传递简单的数据,也可以传递可序列化的对象. 首先来个简单点吧. 首先在,mainActivity.xml文件中加入一个button按钮 private Button butto ...
- android 使用静态变量传递数据
使用静态变量传递数据之通用方式. 测试应用:当前页面点击button传递数据到一个新的页面显示在textview中. 首先在,mainActivity.xml文件中加入一个button按钮 <B ...
- Android学习之Intent传递数据
Intent在Activity中的作用主要是有两个: 1.启动目标Activity 2.传递数据 Intent在传递数据时分两种情况:向下一个Activity传递数据和从下一个Activity返回数据 ...
- [Android] Android 最全 Intent 传递数据姿势
我们都是用过 Intent,用它来在组件之间传递数据,所以说 Intent 是组件之间通信的使者,一般情况下,我们传递的都是一些比较简单的数据,并且都是基本的数据类型,写法也比较简单,今天我在这里说的 ...
- Android Activity和Fragment传递数据
1.Activity与Activity传递数据 UserLoginActivity.java: Intent welcomePage = new Intent(); Bundle dataBundle ...
- WebView之js调用Android类的方法传递数据
1,具体的思路如下: 在android中写一个Activity,里面写一个webview,这个webview加载本地的一个html文件,显示这个网页,这个网页包括一个用户名和密码的输入框和两个按钮(只 ...
- Android基础 -- Activity之间传递数据(bitmap和map对象)
原文:http://blog.csdn.net/xueerfei008/article/details/23046341 做项目的时候需要用到在2个activity之间传递一些数据,之前做的都是些字符 ...
随机推荐
- xargs的i参数
xargs与find经常结合来进行文件操作,平时删日志的时候只是习惯的去删除,比如 # find . -type f -name "*.log" | xargs rm -rf * ...
- Python环境搭建之OpenGL
以下内容为我python OpenGl 环境搭建历程: win7 64位操作系统,python3.5.3 ,无其他相关. 直接cmd或PowerShell输入以下命令: pip install PyO ...
- JavaScript Post提交数据并跳转到页面(模拟Form表单提交)
function GotoWatchTicketCode() { var orderID='@ViewBag.OrderInfo.OrderID'; var phoneNum='@ViewBag.Or ...
- Halcon学习之八:图像区域叠加与绘制
版权声明:本文为博主原创文章,未经博主允许不得转载. overpaint_gray ( ImageDestination, ImageSource : : : ) 将灰度值不相同区域用不同颜色绘制到 ...
- Jquery.Ajax的使用方法
1.Get $('.manager_republish.notVIP').click(function () { $.ajax({ async: false, type: "get" ...
- MySQL数据库篇之完整性约束和表关系
主要内容: 一.完整性约束 二.表关系 1️⃣ 完整性约束 (1)何为完整性约束? 约束条件与数据类型的宽度一样,都是可选参数. 作用:用于保证数据的完整性和一致性 (2)分类主要有以下五类: 1.n ...
- 从零开始搭建k8s-20180301
yum install -y yum-utils git etcd yum-config-manager --add-repo https://download.docker.com/linux/ce ...
- 利用jekyll架设个人博客
jekyll简介 jekyll是一种可以将Markdown或Textile格式文本文件转换成静态网页的工具.利用jekyll编写发布博客的基本过程为: 使用任何一款编辑器编写符合Markdown或Te ...
- [转]字符集、字符编码、XML中的中文编码
字符集.字符编码.XML中的中文编码 作为程序员的你是不是对于ASCII .UNICODE.GB2321.UTF-7.UTF-8等等不时出现在你面前的这些有着奇怪意义的词感到很讨厌呢,是不是总觉得好象 ...
- Mono在Full AOT模式下的限制
[Mono在Full AOT模式下的限制] 调试时遇到一个Mono运行时异常: ExecutionEngineException: Attempting to JIT compile method ' ...