Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux / Android Intent 使用 Parcel 反序列化出错

Android Parcel 可以序列化反序列化数据 .但上层的(Intent)却反序列化失败.结论:查看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 源代码: 看不出来有什么异常更多Android相关信息见Android 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=11