设为首页 加入收藏

TOP

Android Intent 使用 Parcel 反序列化出错
2014-11-24 01:40:26 来源: 作者: 【 】 浏览:0
Tags:Android Intent 使用 Parcel 序列化 出错

结论:


查看Android源代码, Intent 的Parcel 接口代码,也未能找出问题所在.


如下是我的测试代码 :


非持久化测试代码:


final Intent intent = new Intent("cn.eben.bookshelf.VIEW");

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//


序列化前 Intent 内存



Intent { act=cn.eben.bookshelf.VIEW flg=0x10000000 }



Parcel parcel = Parcel.obtain();
intent.writeToParcel(parcel, 0);

byte[] data = parcel.marshall();


Parcel readParcel = Parcel.obtain();
readParcel.unmarshall(data, 0, data.length);
Intent readIntent = Intent.CREATOR.createFromParcel(readParcel);



// readIntent 内存状态, Intent 反序列化失败.
Intent { (has extras) }
null
null
null
null
null
Bundle[mParcelledData.dataSize=0]
0
null
null
null
null


context.startActivity(readIntent);// Activite 无法启动, Intent 无效


// 持久化测试代码 与内存状态


调试中,查看内存状态:


final Intent intent = new Intent("cn.eben.bookshelf.VIEW");

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);


查看内存:


序列化前 Intent 内存



Intent { act=cn.eben.bookshelf.VIEW flg=0x10000000 }



Parcel parcel = Parcel.obtain();
intent.writeToParcel(parcel, 0);

byte[] data = parcel.marshall();


// 查看Data内存如下:


[22, 0, 0, 0, 99, 0, 110, 0, 46, 0, 101, 0, 98, 0, 101, 0, 110, 0, 46, 0, 98, 0, 111, 0, 111, 0, 107, 0, 115, 0, 104, 0, 101, 0, 108, 0, 102, 0, 46, 0, 86, 0, 73, 0, 69, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, -1, 0, 0, 0, 16, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, -1]



cv.put("intent", data); //将parcel对持久化.


///读取


byte[] data = cursor.getBlob(cursor.getColumnIndex("intent"));


//查看读取到的 Data内存如下: 与写入的相同.



[22, 0, 0, 0, 99, 0, 110, 0, 46, 0, 101, 0, 98, 0, 101, 0, 110, 0, 46, 0, 98, 0, 111, 0, 111, 0, 107, 0, 115, 0, 104, 0, 101, 0, 108, 0, 102, 0, 46, 0, 86, 0, 73, 0, 69, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, -1, 0, 0, 0, 16, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, -1]



if (null != data && 1 < data.length) {
Intent intent = null;
Parcel parcel = Parcel.obtain();


// 进行反序列化:
parcel.unmarshall(data, 0, data.length);



intent = Intent.CREATOR.createFromParcel(parcel);
// intent 内存状态, Intent 反序列化失败.



Intent { (has extras) }
null
null
null
null
null
Bundle[mParcelledData.dataSize=0]
0
null
null
null
null
}


查看Android Intnet 源代码:


看不出来有什么异常


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Java中使用LinkedBlockingQueue实.. 下一篇Android Intent 序列化反序列化

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: