Android开发探索艺术学习笔记(一)

该文章是学习《android开发探索艺术》一书的一些学习笔记,引用了书上一些内容。

预计于一星期内完成全书阅读以及完成本系列的读书笔记。

你在本文将会看到:

① 面向面试的知识点提炼

② 《第一行代码》基础知识下进阶的补充

③ 无代码实现,但是有标注该去阅读原著的哪一页。

 

第一章

一、Activity的生命周期和启动模式

1、生命周期的流程:七个部分

  • onStartonResume的区别、onPauseonStop的区别

  • 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被杀死并重新创建,比如说屏幕的旋转

    • onSaveInstanceStateonRestoreInstanceState、保存和恢复View层次结构 [委托思想 page 25]

    • 恢复数据的时候onRestoreInstanceStateonCreate的区别

  • 由于内存不足而导致的优先级的Activity被杀死

    • 进程的优先级、如何保证进程具有一定优先级

    • 由于配置发生改变导致的activity重新创建,可以在configChanges设置指定属性

 

3、activity的启动模式

  • 四种启动模式对应的使用情况(standard、singleTop、singleTask、singleInstance)

  • TaskAffnity任务相关性,指定activity对应的任务栈,主要与allowTaskReparenting或者singleTask启动模式使用

  • 两种指定activity的启动模式的方式 、两种启动模式的区别[page 35]

 

第二章

一、IPC机制

1、IPCInter-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.chaptercom.ryg.chapter.remote都各自运作在相应的虚拟机上

  • 多进程可能造成的几个问题

    • 单例模式和静态成员完全失效

    • 线程同步机制失效

    • SharePreference可靠性下降

    • Application多次创建 [运行在不同进程的组件 = 运行不同的虚拟机 = 运行不同的Application]

 

3、SerializableParcelable接口

  • SerialVersionUID的作用是干什么用的、序列化前后对象不同

  • static成员变量是否会参加序列化、transient关键字

  • Parcelable接口序列化writeToParcel和反序列化CREATOR [page 61]

  • SerializableParcelable两者之间的区别 (从IO上讲、从存储和网络传输上讲)

 

4、Binder机制 [重点、难点 page 60]

① 如何理解Binder

  • BinderAndroid中的一个类,实现了IBinder接口

  • IPC角度来看,BinderAndroid中的一种跨进程通信方式

  • 从物理设备上看,Binder可以视为虚拟的物理设备,其驱动为/dev/binder

  • Android FrameWork角度来说,BinderServiceManager连接各种ManagerManagerService的桥梁

  • 从应用层角度上讲,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中的接口方法addBookgetBookList

  • 两个整型id,分别标识这两个方法,用处在于标识transact过程中,客户端请求哪种方法

  • 一个内部类Stub,即为Binder

    • C/S同处于一个进程中时,不走跨进程的transact方法

    • C/S处于不同进程中时,走跨进程的transact方法,这个逻辑由Stub的内部类Proxy来完成

  • 两个内部类方法/参数的含义

    • DECRIPTORBinder的唯一标识符,一般是全类名

    • asInterface:将Binder对象转化为客户端所需要的AIDL接口类型的对象,若C/S同进程,则返回Stub对象,否则返回Stub.Proxy对象

    • asBinder:此方法返回当前Binder对象

    • onTransact:运行在服务端的Binder线程池中,code参数对应请求方法idreply参数对应返回值

    • getBookList:接口方法,客户端[参数信息写入Parcel对象_data中,请求RPC服务,线程挂起]、服务端[调用onTransact方法,直到RPC返回Parcel对象_reply]、客户端[线程继续执行]

你可能感兴趣的:(Android,java,linux,android,面试,网络)