读书笔记-开发艺术

Android Activity生命周期与IPC详解
本文详细解析了Android中Activity的生命周期特点,包括不同启动模式的行为差异,如singleTop、singleTask等,并深入探讨了进程间通信(IPC)的各种机制,如Binder、AIDL等。

1、activity采用了透明主题,当前的activity不会回调onStop


2、不能再onPause中做重量级的操作,因为必须onPause执行完成之后新的Activity才能Resume,这样才能使得新的Activity尽快显示出来。


3、谁启动了Activity,那么这个Activity就运行在启动它的那个Activity所在的栈中。 standard模式但如果使用ApplicationContext去启动standard模式的Actvitity会报错,原因在于standard模式的Activity默认会进入启动它Activity所属的任务栈中,但ApplicationContext是非Activity类型的Context,没有所谓的任务栈,解决这个问题的方法:为待启动Activity指定FLAG_ACTIVITY_NEW_TASK标记为,这样开启的时候会为它创建一个新的任务栈,实际上这是以singleTask模式启动了。


4、singleTop 栈顶复用模式,如果新的Activity已经位于任务栈的栈顶,那么此Activity不会被重新创建,同时,它的onNewIntent方法会被回调。


5、singleTask 栈内复用模式,只要Activity在一个栈中存在,多次启动它都不会重新创建实例,同时clearTop将目标Activity切换到栈顶,其余的压在目标上面的activity全部出栈。同时回调onNewIntent。这种模式下,系统首先会寻找是否存在目标Activity所需的任务栈,不存在则重新创建一个任务栈,然后创建实例,如果存在所需的任务栈,则判断是否有实例存在,没有,则创建实例压入。


6、singleInstance 加强版的singleTop,单独位于一个任务栈中


7、什么是Activity所需的任务栈呢?TaskAffinity ,这个参数标识了一个Activity所需要的任务栈的名字默认情况下,所有Activity所需的任务栈的名字为应用的包名,当然也可以为每个Activity单独指定TaskAffinity它主要和singleTask模式配对使用,其他情况下无意义。


8、如何给Activity指定启动模式?
1、是Menifest文件指定
2、是通过Intent中设置标志位intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
优先级,代码方式优先于XML方式,两种同时存在时,以java方式为准


9、一个Activity中可以有多个intent-filter,一个Intent只要能匹配任何一组intent-filter即可成功启动对应的Activityaction匹配要求Intent中的action存在且必须和过滤规则中的其中一个action相同


进程间通信IPC

Android --Binder、Socket  
多进程下考虑这个问题
1、一个应用下采用多进程模式
2、两个应用间的通讯


给Android使用多进程,就是给四大组件在配置文件中指定android:process属性 
Android为每一个应用分配了一个独立的虚拟机,或者说为每个进程都分配了一个独立的虚拟机,不同的虚拟机在内存分配上有不同的地址空间。例如两个进程间,都存在UserManager类,这两个类互不干扰,在一个进程中修改了静态值,对其他进程不会造成任何影响。


使用多进程所带来的问题:
1、静态成员和单例模式完全失效
2、线程同步机制完全失效
3、SharedPreferences的可靠性下降,因为不支持两个进程同时去执行写操作,导致数据几率丢失
4、Application会被多次创建



Android IPC方式
1、使用Bundle
2、使用文件共享,适合对数据同步要求不高的进程间通讯,否则,得考虑线程同步来限制写操作
3、使用Messenger  以串行方式处理消息,主要作用处理消息,如果需要跨进程调用服务器的方法呢?这就没办法了
4、AIDL的方式   如果服务端进程意外停止,有两种方法:1、给Binder设置DeathRecipient监听,在这里重连远程服务,2、在
onServiceDisconnected中重连远程服务
5、ContentResolver
6、使用Socket

7、Binder连接池  随着AIDL的数量增加,我们不能无限制地增加Service


截图集合:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值