1、activity采用了透明主题,当前的activity不会回调onStop
2、不能再onPause中做重量级的操作,因为必须onPause执行完成之后新的Activity才能Resume,这样才能使得新的Activity尽快显示出来。
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
截图集合: