• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Android进程通信之两种序列化方式分析

Android进程通信之两种序列化方式分析

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了android 进程间通信,android 进程保活,android 进程,android进程优先级,android进程和线程等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Android进程通信之两种序列化方式分析


2月下旬辞职了,去海南度假到现在,领略了一把三亚风情也算任性和这里写图片描述

然而这样任性带来的后果就是。。不行了我必须吐槽一句。。

没毕业的找工作就这么难嘛!投了57家一家面试机会都没有,好歹给个面试机会啊!!本宝宝不开心!!

不知道其他没有毕业的童鞋是不是也是这种遭遇呢,难道真的是寒冬。。 其实还是自己能力不够。。不过别灰心,只要自己足够努力,迟早会有工作的(标标居然建议我先去端盘子????妈蛋)。

牢骚完毕,为了更好地提升自己,赶紧翻开了主席的《开发艺术探索》,开始学习今天的内容。在说Messanger之前呢,先有必要说说Android中的序列化。

序列化的两种方式

在Android中有两种序列化方式,Serializable(原谅我到现在都不会拼写。。)和Parcelable。其中Serializable是java提供的,而Parcelable是Android独有的。

两种序列化的不同:
Parcelable的效率高,但是使用麻烦,主要用于内存序列化。
Serializable使用简单,但是需要做大量的I/O操作,开销很大,适用于储存设备,或者网络传输。

Serializable的使用

Serializable的使用及其简单,只要实现Serializable接口即可。
在用ObjectOutputStream和ObjectInputStream即可进行序列化操作,举个栗子:

public class Goods implements Serializable{
    private int mId;

    public Goods(int id){
        mId = id;
    }

    public int getmId() {
        return mId;
    }
}
 Goods goods = new Goods(3);

        //序列化
        try {
            ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("/sdcard/test.txt"));
            oos.writeObject(goods);
            oos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        //反序列化
        try {
            ObjectInputStream ois = new ObjectInputStream(new FileInputStream("/sdcard/test.txt"));
            Goods goodsIn = (Goods)ois.readObject();
            ois.close();
            Log.e("wing",goodsIn.getmId()+"");
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

这时,可以看到控制台输出了id 为3。

需要指出的一点是,为了保证序列化的正确性,应该给Goods类添加一个序列化UID。即serialVersionUID。这里用户可以自定义,主要是类的版本检验,在反序列化过程中,如果这个id值不一致,则反序列化失败。

private static final long serialVersionUID = 615555755L

Parcelable的使用

parcelable的使用稍微复杂。但是有强大的as其实也很简单。再以Goods为例,多增加一个name属性。
先实现Parcelable接口,按照提示生成如下代码:

public class Goods implements Parcelable{
    private int mId;
    private String mName;

    public Goods(int id,String name){
        mId = id;
        mName = name;
    }

    protected Goods(Parcel in) {
        mId = in.readInt();
        mName = in.readString();
    }
    //自动生成的代码
    public static final Creator CREATOR = new Creator() {
        @Override
        public Goods createFromParcel(Parcel in) {
            return new Goods(in);
        }

        @Override
        public Goods[] newArray(int size) {
            return new Goods[size];
        }
    };

    public int getmId() {
        return mId;
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeInt(mId);
        dest.writeString(mName);
    }
}

这样便实现了一个Parcel的序列化。当然这都是AS给你生成好的,我们来分析下里面的方法。
看多增加的一个构造器,参数为parcel,他给属性是通过Parcel.read()进行的,比如你的id为int类型,那么就为id = in.readInt(); 这部分应该很好理解。
再来看与之对应的wirteToParcel接口,就是把这些属性write出去。

在用intent传递数据的时候,可以传递实现序列化的类,当然list和map也可以,要求内部元素也是可序列化的。值得注意的是intent传递有个致命的缺陷,就是大小限制。 

 </div>

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Android 中基于 Binder的进程间通信,androidbinder
  • Android Studio中使用AIDL进行进程间通信
  • Android进程通信之两种序列化方式分析

相关文章

  • 2017-05-26Android 手机卫士--md5加密过程,android--md5
  • 2017-05-26tomcat+java的web程序持续占cpu问题调试
  • 2017-05-26编译器开发系列--Ocelot语言6.静态类型检查,编译器--ocelot
  • 2017-05-26Android中使用开源框架EventBus3.0实现Fragment之间的通信交互,fragment开源框架
  • 2017-05-26Android蓝牙操作笔记,android蓝牙笔记
  • 2017-05-26android:ImageView选择本地图片并显示
  • 2018-01-28Android Studio 错误解决办法
  • 2017-05-26Android中TextView设置最大长度,超出显示省略号,androidtextview
  • 2017-05-26getDrawingCache()和Android中的截图方法简介
  • 2017-05-26ULog远程日志——让Android调试更加方便直观

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Android特效专辑(八)——实现心型起泡飞舞的特效,让你的APP瞬间暖心
    • Android 获取当前网速质量调整网络请求
    • Mac OSX系统搭建React natvie for android 开发环境,osxnatvie
    • Android中对Handle机制的理解
    • 安卓高级组件-----网格视图,安卓-----网格
    • 3.6 响应系统设置的事件(Configuration类)
    • Kerberos简介
    • PendingIntent 显示通知,pendingintent通知
    • 安卓界面组件----列表视图,安卓组件----视图
    • ARM汇编中LDR伪指令和LDR指令

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有