美文网首页
Android源码

Android源码

作者: SMSM | 来源:发表于2018-10-10 21:18 被阅读11次

确认了三件事

  1. onActivityResult 和 onStart 和 onRestart哪个先返回?如果设置了不保留活动呢?

onActivityResult一定在Resume之前。
onRestart 和 onCreate 二选一。是否走onRestart要看mStopped==true。
onStart是每次都会被执行的。
不保留活动会导致走onCreate流程,执行玩handleLanuch、performLaunch、onstart、onActivityResult、onresume走这条路。

  1. 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
  1. Application service等 startActivity 要使用new_task_flag

  2. 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();

相关文章

网友评论

      本文标题:Android源码

      本文链接:https://www.haomeiwen.com/subject/uxbmaftx.html