Android研究院android进阶教程Android技术知识

Android开发艺术探索-第二章-IPC机制

2016-01-01  本文已影响1069人  KuTear

layout: post
date: 2015-12-28
title: Android开发艺术探索-第二章-IPC机制
categories: blog
tags: [Activity,Android]
category: Android
description:


本文首发于KuTear,转载请注明

2.1 Android IPC

Android常用进程间通信

  1. Binder
  2. Socket
  3. ContentProvider
  4. 文件共享(SharePreference/普通文件/数据库) 对同步要求不是很高才使用,不建议使用SharePreference.

2.2 Android多进程

  1. 开启方式

    在AndroidMenifest中为四大组件指定android:process=""属性 <br />
    默认进程名字为包名,指定 android:process=":##" 的进程名为 包名:##,该进程为当前App的私有进程,其他应用的组件不可以和他跑在同一进程中.其他类型的进程可以通过ShareUID共享(签名相同)

  2. 多进程的运行

    在不同进程中的四大组件,不能通过内存来共享数据.静态字段在不同的进程有不同的副本,且互不影响.不同进程含有不同的Application引用(开启进程会为该进程创建Application).

2.3 IPC基础介绍

  1. 序列化

    • Serializable

      静态成员变量属于类而不属于对象,不会参与序列化过程,其次使用transient(短暂)标志的成员变量也不会参与序列化过程.

      序列化到本地

             User user = new User(1, "hello world", false);
             File cachedFile = new File(MyConstants.CACHE_FILE_PATH);
             ObjectOutputStream objectOutputStream = null;
             try {
                 objectOutputStream = new ObjectOutputStream(
                         new FileOutputStream(cachedFile));
                 objectOutputStream.writeObject(user);
             } catch (IOException e) {
                 e.printStackTrace();
             } finally {
                 //数据流关闭
             }
      

      从本地恢复序列化

             User user = null;
             File cachedFile = new File(MyConstants.CACHE_FILE_PATH);
             if (cachedFile.exists()) {
                 ObjectInputStream objectInputStream = null;
                 try {
                     objectInputStream = new ObjectInputStream(
                             new FileInputStream(cachedFile));
                     user = (User) objectInputStream.readObject();
                 } catch (IOException e) {
                     e.printStackTrace();
                 } catch (ClassNotFoundException e) {
                     e.printStackTrace();
                 } finally {
                     //数据流关闭
                 }
             }
      
    • Parcelable

      在Android Studio中可以利用插件自动生成.注意boolean转化为int/byte存储

        @Override
        public void writeToParcel(Parcel dest, int flags) {
             dest.writeInt(this.id);
             dest.writeByte(isFirst ? (byte) 1 : (byte) 0);
        }
        protected Demo(Parcel in) {
             this.id = in.readInt();
             this.isFirst = in.readByte() != 0;
        }
      

      相比Serializable,Parcelable的性能更好,Serializable需要大量的I/O操作

    • Binder

2.4 Android中的IPC

2.5 Binder线程池

2.6 选择合适的IPC

选择合适的IPC

参考

Art of Android Development Reading Notes 2

上一篇 下一篇

猜你喜欢

热点阅读