确认了三件事
- onActivityResult 和 onStart 和 onRestart哪个先返回?如果设置了不保留活动呢?
onActivityResult一定在Resume之前。
onRestart 和 onCreate 二选一。是否走onRestart要看mStopped==true。
onStart是每次都会被执行的。
不保留活动会导致走onCreate流程,执行玩handleLanuch、performLaunch、onstart、onActivityResult、onresume走这条路。
- finish之后setResult的结果是如何跨进程回传给上个页面的?双向通道是如何建立的。
RuntimeInit.setApplicationObject(mAppThread.asBinder());
final IActivityManager mgr = ActivityManager.getService();
try {
mgr.attachApplication(mAppThread);
} catch (RemoteException ex) {
throw ex.rethrowFromSystemServer();
}
IActivityManager.aidl
IApplicationThread.aidl
-
Application service等 startActivity 要使用new_task_flag
-
SystemServiceRegistry 维护 ACTIVITY_SERVICE 的 ActivityManager 的映射关系
ActivityManager 是对 ActivityManagerService的代理 final IBinder b = ServiceManager.getService(Context.ACTIVITY_SERVICE);
ActivityManagerService是从ServiceManager找到的,ServiceManager是对ServiceManagerNative的代理 1号binder
IBinder是中间桥梁
IMyAidlInterface iMyAidlInterface = new IMyAidlInterface.Stub() {
@Override
public void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat, double aDouble, String aString) throws RemoteException {
}
};
IBinder sender = iMyAidlInterface.asBinder();
IMyAidlInterface receiver = IMyAidlInterface.Stub.asInterface(sender);
receiver.basicTypes();
网友评论