[读书笔记]《Android开发艺术探索》第二章笔记

使用匿名binder实现client向server端的死亡通知 匿名binder的一个常见使用场景分析。 阅读详情

《Android开发艺术探索》第二章笔记

IPC

  • Inter-Process Communication的缩写。含义为进程间通信或跨进程通信,是指两个进程之间进行数据交换的过程。

进程和线程的区别

  • 按照操作系统的描述,线程是CPU调度的最小单元,同时线程是一种有限的系统资源。
  • 进程一般指一个执行单元,在PC和移动设备上指一个程序或者一个应用。一个进程可以包含多个线程,因此进程和线程是包含与被包含的关系。

多进程分为两种

  • 第一种情况是一个应用因为某些原因自身需要采用多线程模式来实现。
  • 另一种情况是当前应用需要向其他应用获取数据

Android中的多进程模式

通过给四大组件指定android:process属性,我们可以开启多线程模式

  • 进程名以”:”开头的进程属于当前应用的私有进程,其他应用的组件不可以和它跑在同一进程,而进程名不以”:”开头的进程属于全局进程,其他应用通过ShareUID方式可以和它跑在同一个进程中。
  • Android系统会为每个应用分配一个唯一的UID,具有相同UID的应用才能共享数据,两个应用通过ShareUID跑在同一个进程中是有要求的,需要这两个应用有相同的ShareUID并且签名相同才可以。在这种情况下,它们可以互相访问对方的私有数据,比如data目录、组件信息等,不管它们是否跑在同一个进程中。当然如果它们跑在同一个进程中,那么除了能共享data目录、组件信息,还可以共享内存数据,或者说它们看起来就像是一个应用的两个部分。

多进程模式的运行机制

  • Android为每一个应用分配了一个独立的虚拟机,或者说为每个进程都分配了一个独立的虚拟机,不同的虚拟机在不同的内存分配上有不同的地址空间,这就导致在不同的虚拟机中访问同一个类的对象会产生多份副本。
  • 所有运行在不同进程中的四大组件,只要它们之间需要通过内存来共享数据,都会共享失败。

一般来说,使用多进程会造成如下几个方面的问题:

  • 静态成员和单例模式完全失效
  • 线程同步机制完全失效

不管是锁对象还是锁全局类都无法保证线程同步,因为不同进程锁的不是同一个对象

  • SharedPreference的可靠性下降

SharedPreferences不支持两个进程同时去执行写操作,否则会导致一定几率的数据丢失,这时因为SharedPreferences底层是通过读写XML文件来实现的,并发写显然是可能出问题的,甚至并发读写都有可能发生问题

  • Application会多次创建

运行在同一个进程中的组件是属于同一个虚拟机和同一个Application的。同理,运行在不同进程中的组件是属于两个不同的虚拟机和Application的。

IPC基础概念介绍

  • Serializable

是Java所提供的一个序列化接口,它是一个空接口,为对象提供标准的序列化和反序列化操作。使用Serializable来实现序列化相当简单,只需要在类的声明中指定一个类似下面的标识即可自动实现默认的序列化过程。


private static final long serialVersionUID = 8711368828010083044L

通过Serializable方来实现对象的序列化,如下代码:


//序列化过程
User user = new User(0, "jake", true);
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("cache.txt"));
out.writeObject(user);
out.close();

//反序列化过程
ObjectInputStream in = new ObjectInputStream(new FileInputStream("cache.txt"));
User newUser = (User)in.readObject();
in.close();

原则上序列化后的数据中的serialVersionUID只有和当前类的serialVersionUID相同时才能够正常的被反序列化。serialVersionUID的详细工作机制是这样的:序列化的时候系统会把当前类的serialVersionUID写入序列化的文件中(也可能是其他的中介),当反序列化的时候系统会去检测文件中的serialVersionUID,看它是否和当前类的serialVersionUID一致,如果一致就说明序列化的类的版本和当前类的版本是相同的,这个时候可以成功反序列化,否则就说明当前类和序列化的类相比发生了某些变换

给serialVersionUID制定为1L或者采用Eclipse根据当前类结构去生成的hash值,这两者并没有本质区别。

  • 静态成员变量属于类不属于对象,所以不会参与序列化过程
  • 其次用transient关键字标记的成员变量不参与序列化过程

Parcelable接口

Parcelable也是一个接口,只要实现这个接口,一个类的对象就可以实现序列化并可以通过Intent的Binder传递
Parcelable的方法说明:

方法功能标记位
createFromParcel(Parcel in)从序列化的对象中创建原始对象
newArray[int size]创建指定长度的原始对象数组
User(Parcel in)从序列化的对象中创建原始对象
write ToParcel(Parcel out, int flags)将当前对象写入序列化结构中,其中flags标识有两种值0或1(参见右侧标记位)。为1时标识当前对象需要作为返回值返回,不能立即释放资源,几乎所有情况都为0PARCELABLE_WRITE_RETURN_VALUE
describeContents返回当前对象的内容描述。如果含有文件描述符,返回1(参见右侧标记位),否则返回0,几乎所有的情况都返回0CONTENTS_FILE_DESCRIPTOR
  • 系统已经为我们提供了许多实现了Parcelable接口的类,它们都是可以直接序列化的,比如Intent、Bundle、Bitmap等,同时List和Map也可以序列化,前提是它们里面的每个元素都是可序列化的。

如何选取

Serializable是Java中的序列化接口,其使用起来简单但是开销很大,序列化和反序列化需要大量I/O操作。而Parceleble是Android中的序列化方式,因此更适合在Android平台上,缺点是麻烦,但是效率高,这是Android推荐的序列化方式,所以我们要首选Parcelable。Parcelable主要用在内存序列化上,通过Parcelable将对象序列化到存储设备中或者将对象序列化之后通过网络传输,但是过程稍显复杂,因此在这两种情况下建议大家使用Serializable。

Binder

  • 继承了IBinder接口
  • Binder是一种跨进程通信方式
  • 是ServiceManager连接各种Manager(ActivityManager,WindowManager等)和相应ManagerService的桥梁
  • 从Android应用层来说,Binder是客户端和服务端进行通信的媒介,当bindService的时候,服务器会返回一个包含了服务器端业务调用的Binder对象,通过这个Binder对象,客户端就可以获取服务端提供的服务或者是数据,这里的服务包含了普通服务和基于AIDL的服务

aidl工具根据aidl文件自动生成的java接口的解析:首先,它声明了几个接口方法,同时还声明了几个整型的id用于标识这些方法,id用于标识在transact过程中客户端所请求的到底是哪个方法;接着,它声明了一个内部类Stub,这个Stub就是一个Binder类,当客户端和服务端都位于同一个进程时,方法调用不会走跨进程的transact过程,而当两者位于不同进程时,方法调用需要走transact过程,这个逻辑由Stub内部的代理类Proxy来完成。
所以,这个接口的核心就是它的内部类Stub和Stub内部的代理类Proxy。 下面分析其中的方法:

  • asInterface(android.os.IBinder obj):用于将服务器端的Binder对象转化成客户端所需的AIDL接口类型的对象,这种转换过程是区分进程的,如果客户端和服务端是在同一进程中,那么这个方法返回的是服务端的Stub对象本身,否则返回的是系统封装的Stub.Proxy对象。
  • asBinder:返回当前Binder对象
  • onTransact:这个方法运行在服务端中的Binder线程池中,当客户端发起跨进程请求时,远程请求会通过系统底层封装后交由此方法来处理。
    这个方法的原型是public Boolean onTransact(int code, Parcelable data, Parcelable reply, int flags)
    服务端通过code可以知道客户端请求的目标方法,接着从data中取出所需的参数,然后执行目标方法,执行完毕之后,将结果写入到reply中。如果此方法返回false,说明客户端的请求失败,利用这个特性可以做权限验证(即验证是否有权限调用该服务)。
  • Proxy#[Method]:代理类中的接口方法,这些方法运行在客户端,当客户端远程调用此方法时,它的内部实现是:首先创建该方法所需要的参数,然后把方法的参数信息写入到_data中,接着调用transact方法来发起RPC请求,同时当前线程挂起;然后服务端的onTransact方法会被调用,直到RPC过程返回后,当前线程继续执行,并从_reply中取出RPC过程的返回结果,最后返回_reply中的数据。
首先,当客户端发起远程请求时,由于当前线程会被挂起直至服务端进程返回数据,所以如果一个远程方法是很耗时的,那么不能在UI线程发起此远程请求;其次,由于服务端的Binder方法运行在Binder的线程池中,所以不管Binder是否耗时都应该采用同步的方式去实现,因为它已经运行在一个线程中了。

Binder两种重要的方法

  1. linkToDeath
  2. unlinkToDeath
    Binder运行在服务端,如果由于某种服务端异常终止了的话会导致客户端的远程调用失败、所以Binder提供了两个配对的方法linkToDeath和unlinkToDeath,通过linkToDeath方法可以给Binder设置一个死亡代理,当Binder死亡的时候客户端就会收到通知,然后就可以重新发起连接从而恢复连接了。

如何给Binder设置死亡代理

1、声明一个DeathRecipient对象、DeathRecipient是一个接口,其内部只有一个方法bindDied,实现这个方法就可以在Binder死亡的时候收到通知了。


private IBinder.DeathRecipient mDeathRecipient = new IBinder.DeathRecipient() {
    @Override
    public void binderDied() {
        if (mRemoteBookManager == null) return;
        mRemoteBookManager.asBinder().unlinkToDeath(mDeathRecipient, 0);
        mRemoteBookManager = null;
        // TODO:这里重新绑定远程Service
    }
};

2、在客户端绑定远程服务成功之后,给binder设置死亡代理


mRemoteBookManager.asBinder().linkToDeath(mDeathRecipient, 0);

Android的IPC方式

1、 使用Bundle

Bundle实现了Parcelable接口,Activity、Service和Receiver都支持在Intent中传递Bundle数据

2、 使用文件共享

这种方式简单,适合在对数据同步要求不高的进程之间进行通信,并且要妥善处理并发读写的问题,SharedPreferences是一个特例,虽然它也是文件的一种,但是由于系统对它的读写有一定的缓存策略,即在内存中会有一份SharedPreferences文件的缓存,因此在多进程模式下、系统对它的读写就变的不可靠,当面对高并发读写访问的时候,有很大几率会丢失,因此,不建议在进程间通信中使用SharedPreferences。

3、 使用Messenger

Messenger是一种轻量级的IPC方案,它的底层实现就是AIDL。Messenger是以串行的方式处理请求的,即服务端只能一个个处理,不存在并发执行的情形。

4、 使用AIDL

大致流程:首先建一个Service和一个AIDL接口,接着创建一个类继承自AIDL接口中的Stub类中的抽象方法,在Service的onBind方法中返回这个类的对象,然后客户端就可以绑定服务端Service,建立连接后就可以访问远程服务端的方法了。
1.AIDL支持的数据类型:基本数据类型、String和CharSequence、ArrayList、HashMap、Parcelable以及AIDL;
2.某些类即使和AIDL文件在同一个包中也要显式import进来;
3.AIDL中除了基本数据类,其他类型的参数都要标上方向:in、out或者inout;
4.AIDL接口中支持方法,不支持声明静态变量;
5.为了方便AIDL的开发,建议把所有和AIDL相关的类和文件全部放入同一个包中,这样做的好处是,当客户端是另一个应用的时候,可以直接把整个包复制到客户端工程中。
6.RemoteCallbackList是系统专门提供的用于删除跨进程Listener的接口。RemoteCallbackList是一个泛型,支持管理任意的AIDL接口,因为所有的AIDL接口都继承自IInterface接口。

5、使用ContentProvider

1.ContentProvider主要以表格的形式来组织数据,并且可以包含多个表;
2.ContentProvider还支持文件数据,比如图片、视频等,系统提供的MediaStore就是文件类型的ContentProvider;
3.ContentProvider对底层的数据存储方式没有任何要求,可以是SQLite、文件,甚至是内存中的一个对象都行;
4.要观察ContentProvider中的数据变化情况,可以通过ContentResolver的registerContentObserver方法来注册观察者;

6、使用Socket

套接字,分为流式套接字和用户数据报套接字两种,分别对应于网络的传输控制层中TCP和UDP协议。

  • TCP协议是面向连接的协议,提供稳定的双向通信功能,TCP连接的建立需要经过”三次握手”才能完成,为了提供稳定的数据传输功能,其本身提供了超时重传功能,因此具有很高的稳定性
  • UDP是无连接的,提供不稳定的单向通信功能,当然UDP也可以实现双向通信功能,在性能上,UDP具有更好的效率,其缺点是不保证数据能够正确传输,尤其是在网络拥塞的情况下。

Binder连接池

  • 当项目规模很大的时候,创建很多个Service是不对的做法,因为service是系统资源,太多的service会使得应用看起来很重,所以最好是将所有的AIDL放在同一个Service中去管理。整个工作机制是:每个业务模块创建自己的AIDL接口并实现此接口,这个时候不同业务模块之间是不能有耦合的,所有实现细节我们要单独开来,然后向服务端提供自己的唯一标识和其对应的Binder对象;对于服务端来说,只需要一个Service,服务端提供一个queryBinder接口,这个接口能够根据业务模块的特征来返回相应的Binder对象给它们,不同的业务模块拿到所需的Binder对象后就可以进行远程方法调用了。
    Binder连接池的主要作用就是将每个业务模块的Binder请求统一转发到远程Service去执行,从而避免了重复创建Service的过程。
  • 建议在AIDL开发工作中引入BinderPool机制。

选用合适的IPC方式

Mou icon

Android 开发艺术探索 - 读书笔记目录 仅作为读书笔记使用,建议阅读原书。 书中代码部分已和现版本不符,建议对比最新版本学习。 读了这本书,越发认识到和大佬们的差距。嗯,加油吧。 过去の自分が今仆の土台となる [第 1 章 - Activity 的生命周期和启动模式] 第 2 章 - IPC 机制 第 3 章 - View 的事件体系 [第 4 章 - View 的工作原理] 第 5 章 - 理解 R... 阅读详情

相关推荐

STM32实战:手把手教你移植CanFestival协议栈(附完整代码)

本文提供了一份详尽的STM32平台移植CanFestival协议栈的实战指南。文章从工程搭建、定时器驱动、CAN硬件适配到对象字典配置,手把手讲解核心步骤,并附完整代码示例。重点剖析了时间管理、报文收发等关键环节的实现与常见问题解决方案,旨在帮助开发者深入理解并成功实现CANopen通信。

kiwi8的博客 273

Android中Parcelable的原理和使用方法

Parcelable的简单介绍 介绍Parcelable不得不先提一下Serializable接口,Serializable是Java为我们提供的一个标准化的序列化接口,那什么是序列化呢? 进行Android开发的时候,无法将对象的引用传给Activities或者Fragments,我们需要将这些对象放到一个Intent或者Bundle里面,然后再传递。简单来说就是将对象转换为可以传输的二进制流(二进制序列)的过程,这样我们就可以通过序列化,转化为可以在网络传输或者保存到本地的流(序列),从而进行传

Dream It Possible 4万+

人形机器人触觉革命:压电式电子皮肤的多模态感知与自修复技术突破

本文深入探讨了压电式电子皮肤如何推动人形机器人的触觉革命。文章分析了其基于压电效应的多模态感知原理,能够灵敏检测压力、振动与温度,并重点介绍了赋予电子皮肤自修复能力的动态共价网络等前沿材料技术,从而极大提升了机器人与物理世界进行精细、安全交互的可靠性与智能化水平。

weixin_29251567的博客 194

Android Parcelable 源码解析

大家都知道,要想在Intent里面传递一些非基本类型的数据,有两种方式,一种实现Parcelable,另一种是实现Serializable接口。 今天先不说Serializable 接口,只说Parcelable。 我们知道,Parcelable 只是一个接口,里面有几个关键方法: writeToParcel /** * Flatten this object in to a Pa...

男儿不展风云志,空有天生八尺躯 1399

实战解析:基于Python的APT攻击检测与ATT&CK框架应用

本文通过实战案例,详细解析了如何利用Python编程语言结合MITRE ATT&CK框架,构建一套针对高级持续性威胁(APT)的自动化检测与狩猎系统。文章涵盖了从环境搭建、核心检测逻辑编写、到模块化框架设计与主动威胁狩猎的全过程,为安全从业者提供了可落地的技术方案,以有效应对复杂的网络攻击。

weixin_29044157的博客 388

【Maxwell16.0】实战指南:从DXF导入到MotorCAD联合仿真的关键技巧

本文详细解析了Maxwell 16.0与MotorCAD进行联合仿真的核心流程与关键技巧。重点阐述了从DXF模型导入、几何修复、一极一槽模型剪裁,到坐标系对齐、MotorCAD参数匹配及结果验证的全过程,旨在帮助工程师高效打通联合仿真链路,规避常见错误,提升电机设计效率。

weixin_29062865的博客 713

利用Andriod死亡通知机制告诉service,client被kill了

Android提供了一种叫做死亡通知的机制,用于满足某些应用的特定需求:     某个process需要知道另外一个process是否存活;或者当某个进程被kill的时候,另外一个进程期望知道这件事情;    一般来讲是某个bound service关心其client是否被kill   可能有人会问,为什么service会关系client是否被kill呢 应用场景:  比

fred专栏 1万+

Magisk如何针对性隐藏Root避免被检测

Magisk隐藏特征码有两种途径,一种是通过插件,一种是定制源码。插件的方式相对简单,但是使用范围也有限,好处是成本低好上手。定制源码难度大,成本高,好处是稳定,后续也好更新维护。

zhonglunshun的专栏 1万+

Android开发Parcelable使用详解

想要在两个activity之间传递对象,那么这个对象必须序列化,android中序列化一个对象有两种方式,一种是实现Serializable接口,这个非常简单,只需要声明一下就可以了,不痛不痒。但是android中还有一种特有的序列化方法,那就是实现Parcelable接口,使用这种方式来序列化的效率要高于实现Serializable接口。不过Serializable接口实在是太方便了,因此在某些

倚栏静望的博客 4791

【四足机器人项目实战】四足机器人嵌入式硬件设计

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言一、电源管理板设计及制作二、通讯中继板设计及制作三、力控无刷电机驱动板设计及制作1.磁场定向控制FOC控制原理2.电机转子位置、速度检测原理3.硬件CAN通讯原理 前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长! 本文先对四足机器人–嵌入式硬件设计做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章 提示:以下是本篇文章正文内容 一、电

qq_35635374的博客 1万+

大语言模型应用指南:幻觉和偏见问题

大语言模型应用指南:幻觉和偏见问题 1. 背景介绍 1.1 大语言模型的发展历程 1.1.1 早期的语言模型 1.1.2 Tr

AI天才研究院 958

Android开发艺术探索读书笔记(第二章)

IPC机制 Android中的多进程模式 一、开启多进程 给四大组件在AndroidManifest.xml中指定android:process属性: 1)android:process = “:remote”–私有进程,其他应用的组件不能和它跑在一个进程之中。 2)android:process = “xxx.xxx.xxx:remote”–其他应用可

qq_17530871的博客 304

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

《Android开发艺术探索》读书笔记第二章--IPC机制

本文是《Android开发艺术探索》读书笔记系列第二章–IPC机制 一、IPC基础 Android IPC简介 Inter-Porcess Communication,含义为进程间通信或者跨进程通信,是指两个进程间进行数据交换的过程。Android间线程的通信是通过消息处理机制(Handler)实现的。在各种操作系统中都需要IPC机制。对于Android,虽然是基于Linux内核的移...

一颗烂葱的博客 2613

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

【Android开发艺术探索读书笔记】第二章 Android中的多进程模式

Android中的多进程模式 开启多进程模式 多进程模式的运行机制Android中的多进程模式开启多进程模式 通常情况下,在Android中的多进程指的是一个应用存在多个进程,而不是指的是两个应用之间的多进程通信。 在Android中使用多进程只有一种方法,就是给四大组件(Activity、Service、Receiver、ContentProvider)在AndroidManifest中指定and

Wzkang的博客 328

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

《Android开发艺术探索》读书笔记----第二章:Android IPC 简介、多进程模式

Android IPC 简介 定义 IPC 是 Inter-Process Communication 的缩写,含义为进程间通信或者跨进程通信,是指两个进程之间交换数据的过程。 进程和线程 根据操作系统的描述,线程是CPU调度的最小单元,同时线程是一种有限的系统资源。进程一般指一个执行单元,在PC和移动设备上指一个程序或者一个应用。一个进程可以包含多个线程,因此,进程和线程

不二 622

IPC机制 - Android开发艺术探索读书笔记(第二章)

第二章 - IPC机制 2.1 Android IPC简介 1、IPC(Inter-Process Communication)进程间通信或跨进程通信 2、线程与进程?     线程 -CPU调度最小单元     进程 -①有限的系统资源一个执行单元               ②可包含多个线程   2.2 Android中的多进程模式 1、Android使用多进程唯一方法 -

没有故事的A同学 698

《Android开发艺术探索》读书笔记-第二章 IPC机制(未啃透)

Android开发艺术探索-读书笔记第二章 IPC机制2.2 Android中的多进程模式2.2.1 开启多进程模式1)开启多进程方式:在AndroidMenifest.xml文件中为四大组件指定android:process属性 2)“:”和完整进程名的区别:“:”的含义是指要在当前的进程名前附加上当前的包名,而完整进程名就是以完整的名字为命名,不会附加信息;以“:”开头的进程属于当前应用的私有

被代码淹没的小伙子的博客 310

android开发艺术探索 笔记,Android 开发艺术探索读书笔记(一)

之前断断续续地学了一些 Android 开发基础,也写过几个简单的 app,但都是特别简单的那种,还有很多知识学完了没有用过,现在已经忘得差不多了。最近找到一本书叫 Android 开发艺术探索(作者叫任玉刚,据说是百度的大牛),2015 年出版的,看完第一章后感觉不错,很适合我这种有点基础的人看,于是决定写个读书笔记,记录自己从书中学习到的知识。第一章本章主要介绍了 Activity 相关的一些...

weixin_42395498的博客 442

Android开发艺术探索读书笔记(一)

首先向各位严重推荐主席这本书《Android开发艺术探索》。     再感谢主席邀请写这篇读书笔记 + 书评。书已经完整的翻完一遍了,但是还没有细致的品读并run代码,最近有时间正好系统的把整本书从内容到代码都梳理一遍,一方面方便自己总结,一方面也为主席宣传,如果你还在犹豫要不要入手这本书的时候,希望看完我的笔记,能激发你购买的动力。OK,言归正传,下面先简单写几句书评,本人技术有限,只是从自身

amurocrash的专栏 9618

《Android开发艺术探索》读书笔记

一、前言 花了几天整理完《Android进阶之光》的读书笔记,效果不是很满意,把以前零散整合成一片超长笔记,总感觉也不是那么好,决定接下来读书笔记还是拆开来,以后也好查找一点。 ...

soleil雪寂 606

Android开发艺术探索读书笔记(一)

思维导图如下:

斩月的专栏 940

Android开发艺术探索笔记

《Android开发艺术探索》这本书在几年前就已经买了,陆陆续续看过几次,都没有看完,没有理解透。 最近重读《Android开发艺术探索》,读了两次,第一次读完感觉还有大量的知识点没有理解,再次阅读,练习书中例子,记读书笔记,理解加深了几分。 [学习笔记]Android开发艺术探索:Activity的生命周期和启动模式 [学习笔记]Android开发艺术探索:IPC机制 [学习笔记]A...

尘埃zza的博客 494

《Android 开发艺术探索》读书笔记完整版

第一章 Activity的生命周期和启动模式 第二章 IPC机制 第三章 View的事件体系 第四章 View的工作原理 第五章 理解RemoteViews 第六章 Android的Drawable 第七章 Android动画深入分析 第八章 理解Window和WindowManager 第九章 四大组件的工作过程 第十章 Android的消息机制 第十一章 Androi...

JiandaoStudio 619

《Android 开发艺术探索》读书笔记

《Android 开发艺术探索》这本书写的太好了,作者任玉刚也是大牛,本人十分佩服,每次阅读这本书,都有不同的理解,所以将书中重要的知识点做了一些笔记,方便以后的阅读,下面是笔记的章节:第一章 Activity的生命周期和启动模式第二章 IPC机制第三章 View的事件体系第四章 View的工作原理第五章 理解RemoteViews第六章 Android的Drawable第七章 Android动画深

K-night的专栏 1527

Android 开发艺术探索 读书笔记

第二章 IPC机制 Android开发艺术探索 p50 IPC 是Inter-Process Communication的缩写,含义:进程间通信或跨进程通信,是指两个进程之间进行数据交换的过程。    android中主线程就是UI线程,在UI线程中才能操作界面元素。     android中开启多进程只有一种方法:给四大组件(Activity,Service,Receiver,Cont

Dseai_的博客 646
上一篇: [计算机网络]TCP与UDP
下一篇: [读书笔记]多线程学习笔记
陶程
博客等级 码龄12年 360粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值