Looper这个东东很重要,线程之间的通信全靠它,Activity能运行起来也是因为它

下面是启动时的方法调用:

Instrumentation.callActivityOnCreate(Activity, Bundle) line: 1079ActivityThread.performLaunchActivity(ActivityThread$ActivityClientRecord, Intent) line: 2023ActivityThread.handleLaunchActivity(ActivityThread$ActivityClientRecord, Intent) line: 2084ActivityThread.access$600(ActivityThread, ActivityThread$ActivityClientRecord, Intent) line: 130ActivityThread$H.handleMessage(Message) line: 1195ActivityThread$H(Handler).dispatchMessage(Message) line: 99Looper.loop() line: 137ActivityThread.main(String[]) line: 4745

ThradActivity:

 public static void main(String[] args) {        SamplingProfilerIntegration.start();        // CloseGuard defaults to true and can be quite spammy.  We        // disable it here, but selectively enable it later (via        // StrictMode) on debug builds, but using DropBox, not logs.        CloseGuard.setEnabled(false);        Process.setArgV0("<pre-initialized>");        Looper.prepareMainLooper();        if (sMainThreadHandler == null) {            sMainThreadHandler = new Handler();        }//这里的线程应该就是所谓的UI线程,每个线程有自己的Looper, 用Handler的sendMessage可以向Looper的//消息队列加消息,Handler在初始化里会找到当前的线程并加与之对应的Looper的消息队列取到,//这样其它线程就可以给它发送消息,而Looper里面的loop方法会不停的执行处理消息,这样来处理线程之间的通信
        ActivityThread thread = new ActivityThread();        thread.attach(false);//这里完成部分初始化        AsyncTask.init();        if (false) {            Looper.myLooper().setMessageLogging(new                    LogPrinter(Log.DEBUG, "ActivityThread"));        }        Looper.loop();//这是个死循环,它里面有个消息队列,它不停的遍历并处理消息,它会触发主Activity的加载        throw new RuntimeException("Main thread loop unexpectedly exited");    }

public void handleMessage(Message msg) {            if (DEBUG_MESSAGES) Slog.v(TAG, ">>> handling: " + codeToString(msg.what));            switch (msg.what) {                case LAUNCH_ACTIVITY: {                    Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "activityStart");                    ActivityClientRecord r = (ActivityClientRecord)msg.obj;                    r.packageInfo = getPackageInfoNoCheck(                            r.activityInfo.applicationInfo, r.compatInfo);                    handleLaunchActivity(r, null);//处理启动Activity                    Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);                } break;

performLaunchActivity会完成Activity的加载

 Activity activity = null;        try {            java.lang.ClassLoader cl = r.packageInfo.getClassLoader();//加载Activity            activity = mInstrumentation.newActivity(                    cl, component.getClassName(), r.intent);            StrictMode.incrementExpectedActivityCount(activity.getClass());            r.intent.setExtrasClassLoader(cl);            if (r.state != null) {                r.state.setClassLoader(cl);            }        } attach方法会完成Activity主窗口的创建activity.attach(appContext, this, getInstrumentation(), r.token,                        r.ident, app, r.intent, r.activityInfo, title, r.parent,                        r.embeddedID, r.lastNonConfigurationInstances, config);
activity.mCalled = false;                mInstrumentation.callActivityOnCreate(activity, r.state);会触发Activity的onCreate事件

Activity:

 mWindow = PolicyManager.makeNewWindow(this);

View之类的组件是在setContentView时才开始绘的

下面以PhoneWindow为例:

  public void setContentView(View view, ViewGroup.LayoutParams params) {        if (mContentParent == null) {            installDecor();//这里才是用于显示的窗,decor它是一个FrameLayout,可以看下里面的chrild        } else {            mContentParent.removeAllViews();        }        mContentParent.addView(view, params);        final Callback cb = getCallback();        if (cb != null && !isDestroyed()) {            cb.onContentChanged();        }    }

更多相关文章

  1. Android6.0 PackageManagerService(PMS)-安装
  2. 锦囊篇|一文摸懂RxJava
  3. Android(安卓)开发中的  AsyncTask 的用法记录
  4. Android(安卓)ANR
  5. 网络---《第一行代码Android》笔记
  6. Android(安卓)-- Camera源码简析,启动流程
  7. android 开启关闭wifi服务
  8. android 学习笔记4——post请求+线程控制
  9. Android中的HandlerThread和IntentService

随机推荐

  1. Android版本更新提示框
  2. 升级Android Studio 3.2.1后 遇到问题
  3. 通过Android上的意图启动Google地图路线
  4. Android Build系统常见变量说明
  5. Android 小球碰撞检测技术
  6. android 原生应用的调用
  7. android常用intent的方法
  8. [Android] URI那些事
  9. 【Android(安卓)开发教程】GridView
  10. 最详细的mac下Android(安卓)studio配置gr