美文网首页
关于LayoutInflater 和 Activity Cont

关于LayoutInflater 和 Activity Cont

作者: Zcclucky | 来源:发表于2016-02-19 00:02 被阅读155次

    Tip

    沿用Google 官网的一段话:

    It is never used directly. Instead, use getLayoutInflater()
    orgetSystemService(Class)

    to retrieve a standard LayoutInflater instance that is already hooked up to the current context and correctly configured for the device you are running on. For example:

    LayoutInflater inflater = (LayoutInflater)context.getSystemService      (Context.LAYOUT_INFLATER_SERVICE);
    

    不要直接使用静态实例
    然而对照源码我们发现 from 函数

    public static LayoutInflater from(Context context) {
                LayoutInflater LayoutInflater =            (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);   
     if (LayoutInflater == null) { 
           throw new AssertionError("LayoutInflater not found."); 
       }  
      return LayoutInflater;
    }
    

    做的就是getsystemservice 的工作 是一个方便的方式

    膨胀layout过程中使用到了xmlpullparaser 读取xml文件

    关于页面自定义和progress相关解耦

    这里需要了解到的是contextWrapper的一个函数 attachbaseContext
    Activity 本身是一个Context 继承自 ContextWrapper
    ContextWrapper 是 Context的一个代理模式的实现。
    而 该方法 仅在Activity.attach 方法调用,后者是在 framework 创建 Activity 的时候调用的
    再看这段调用

        private Activity performLaunchActivity(ActivityClientRecord r, Intent customIntent) {
            
            Activity activity = null;
            try {
                java.lang.ClassLoader cl = r.packageInfo.getClassLoader();
                activity = mInstrumentation.newActivity(
                        cl, component.getClassName(), r.intent);           
            } catch (Exception e) {
            }
    
            try {
                if (activity != null) {
                    ContextImpl appContext = new ContextImpl();
                    appContext.init(r.packageInfo, r.token, this);
                    appContext.setOuterContext(activity);
                    
                    CharSequence title = r.activityInfo.loadLabel(appContext.getPackageManager());
                    Configuration config = new Configuration(mCompatConfiguration);
                 
                    activity.attach(appContext, this, getInstrumentation(), r.token,
                            r.ident, app, r.intent, r.activityInfo, title, r.parent,
                            r.embeddedID, r.lastNonConfigurationInstances, config);
    

    发现也是传入的ContextImpl实现类来输入上下文。 因此这个attachbasecontext 事实上是在启动activity之前就调用了 在oncreate之前

    相关文章

      网友评论

          本文标题:关于LayoutInflater 和 Activity Cont

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