Android开发探索艺术学习笔记
Posted 汤姆的猫生
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android开发探索艺术学习笔记相关的知识,希望对你有一定的参考价值。
该文章是学习《android开发探索艺术》一书的一些学习笔记,引用了书上一些内容。
预计于一星期内完成全书阅读以及完成本系列的读书笔记。
你在本文将会看到:
① 面向面试的知识点提炼
② 《第一行代码》基础知识下进阶的补充
③ 无代码实现,但是有标注该去阅读原著的哪一页。
第一章
一、Activity的生命周期和启动模式
1、生命周期的流程:七个部分
-
onStart
和onResume
的区别、onPause
和onStop
的区别 -
在
Activity-A
打开后,再次打开Activity-B
,调用B onResume
还是调用A onPause?
-
Instrumentation => Binder(AMS) => AMS(ActivityThread) => ActivityStack
[Page 20]
-
2、特殊情况下调用的生命周期情况:
① 正常情况下的生命周期调度
-
特定的
Activity
第一次启动 -
打开新的非透明的
Activity
或者切换到桌面 -
打开新的透明的
Activity
-
当用户按下
back
键返回的时候 -
当
Activity
被系统回收后再次打开的时候
② 异常情况下的生命周期调度 [Page 24]
-
资源相关系统配置发生导致
Activity
被杀死并重新创建,比如说屏幕的旋转-
onSaveInstanceState
和onRestoreInstanceState
、保存和恢复View
层次结构[委托思想 page 25]
-
恢复数据的时候
onRestoreInstanceState
和onCreate
的区别
-
-
由于内存不足而导致的优先级的
Activity
被杀死-
进程的优先级、如何保证进程具有一定优先级
-
由于配置发生改变导致的
activity
重新创建,可以在configChanges
设置指定属性
-
3、activity
的启动模式
-
四种启动模式对应的使用情况(
standard、singleTop、singleTask、singleInstance
) -
TaskAffnity
任务相关性,指定activity
对应的任务栈,主要与allowTaskReparenting
或者singleTask
启动模式使用 -
两种指定
activity
的启动模式的方式 、两种启动模式的区别[page 35]
第二章
一、IPC机制
1、IPC
是Inter-Process Communication
的缩写
-
进程间的通信方式
-
Linux
上的进程通信方式包括命名通道、共享内容、信号量进行通信 -
Windows
上可以通过剪贴板、管道和邮槽进行通信 -
android
最有特色就是Binder
进程通信了,除此之外还支持Socket
通信
-
-
IPC
的应用场景-
应用本身需要采用多进程模式实现
[Page 51]
-
当前应用需要向其他应用获取数据,如
ContentProvider
等
-
2、如何使用多进程模式
-
android
中使用多进程的方法(android:process、JNI在native层fork一个进程,但并不常用)
-
:remote
和:com.ryg.chapter_2.remote
的区别 -
UID、shareUID
,进程间如何进行共享数据[page 54]
-
进程下组件的
static
变量的同步问题[page 55]
-
com.ryg.chapter
和com.ryg.chapter.remote
都各自运作在相应的虚拟机上
-
-
多进程可能造成的几个问题
-
单例模式和静态成员完全失效
-
线程同步机制失效
-
SharePreference
可靠性下降 -
Application
多次创建[运行在不同进程的组件 = 运行不同的虚拟机 = 运行不同的Application]
-
3、Serializable
和Parcelable
接口
-
SerialVersionUID
的作用是干什么用的、序列化前后对象不同 -
static
成员变量是否会参加序列化、transient
关键字 -
Parcelable
接口序列化writeToParcel
和反序列化CREATOR
[page 61]
-
Serializable
和Parcelable
两者之间的区别(从IO上讲、从存储和网络传输上讲)
4、Binder
机制 [重点、难点 page 60]
① 如何理解Binder
?
-
Binder
是Android
中的一个类,实现了IBinder
接口 -
从
IPC
角度来看,Binder
是Android
中的一种跨进程通信方式 -
从物理设备上看,
Binder
可以视为虚拟的物理设备,其驱动为/dev/binder
-
从
Android FrameWork
角度来说,Binder
是ServiceManager
连接各种Manager
和ManagerService
的桥梁 -
从应用层角度上讲,
Binder
是客户端和服务端之间进行通信的媒介-
当
binderService
的时候,服务端会返回包含了服务端业务调用的Binder
对象 -
通过
Binder
对象,客户端可以获取服务端提供的服务或者数据(普通服务和AIDL服务)
-
② Binder
机制的使用
-
创建对应的
FileName.aidl、FileName.class、FileManager.aidl
-
build
过程中/generator/aidl_source/out/...
会生成对应的FileManager.java
文件
③ FileManager.java
文件详解
-
IBookManager.aidl => IBookManager.java(implements IInterface)
,所有的Binder
都要通过IInterface
-
两个方法,分别对应
IBookManager.aidl
中的接口方法addBook
和getBookList
-
两个整型
id
,分别标识这两个方法,用处在于标识transact
过程中,客户端请求哪种方法 -
一个内部类
Stub
,即为Binder
类-
当
C/S
同处于一个进程中时,不走跨进程的transact
方法 -
当
C/S
处于不同进程中时,走跨进程的transact
方法,这个逻辑由Stub
的内部类Proxy
来完成
-
-
两个内部类方法/参数的含义
-
DECRIPTOR
:Binder
的唯一标识符,一般是全类名 -
asInterface
:将Binder
对象转化为客户端所需要的AIDL
接口类型的对象,若C/S
同进程,则返回Stub
对象,否则返回Stub.Proxy
对象 -
asBinder
:此方法返回当前Binder
对象 -
onTransact
:运行在服务端的Binder
线程池中,code
参数对应请求方法id
,reply
参数对应返回值 -
getBookList
:接口方法,客户端[参数信息写入Parcel对象_data中,请求RPC服务,线程挂起]
、服务端[调用onTransact方法,直到RPC返回Parcel对象_reply]
、客户端[线程继续执行]
-
以上是关于Android开发探索艺术学习笔记的主要内容,如果未能解决你的问题,请参考以下文章