美文网首页学习笔记
实习笔记17.07.13(内部类使用局部变量要加final)

实习笔记17.07.13(内部类使用局部变量要加final)

作者: 方木Rudy | 来源:发表于2017-08-03 22:06 被阅读0次
    1. Rxjava:如果在新建observable之前有外部参数想要传递到内部,如何传递?
      答:直接在使用类中定义成员变量,然后传递到成员变量中
    2. Rxjava以数据流为核心,以响应式编程的方式同时编写被观察者和观察者的动作,但通常我们被观察者是Model层,观察者是View层,是不是违背了MVP分层原则?(应该不是,完全可以在被观察者的动作中操作model,在观察者的动作中操作view,但怎么才能将model和view传入呢???-------使用presenter将二者连接起来)
    3. 查询手机文件时要通过应用context获取 getContentResolver(),如果这时不在activity中,可以写一个工具类ContextUtil来获得,代码如下:
    public class BaseActivity extends Activity {
        private static Application mApplication;
    
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            mApplication = this.getApplication();
        }
    
        public static Application getBaseApplication() {
            return mApplication;
    
        }
    }
    
    1. xhdpi--对应项目目录是:720*1280
    2. 内部类持有外部类的引用,可以引用外部类的成员变量,但使用局部变量的时候要注意XXX --final?
    3. textview和drawable可以结合
    4. getbaseapplication作为工具类,如果传入activity的引用会产生内存泄漏的问题
    5. RxAndroid获取当前线程的id值
    6. tid可以理解为线程的Id , pid 是process进程id , uid 是user 用户id;
      例:android.os.Process.myTid()
    7. IO线程和普通线程的区别? 在RxJava中,subscribeOn(newThread())可以实现读取数据库,subscribeOn(io())会异常
      答:因为读取数据库操作不是io = =,android中媒体数据库时媒体文件的映射

    git:

    1. 资源文件的转移 xhdpi 720*1280
    2. 布局文件的优化
    3. BaseActivity的运用,可以作为工具类获得application
    4. getHomeDefaultPhotoList去掉context参数,优化为相册名称albumName参数
    5. 引入RxJava
    6. 查询手机相册信息改为异步查询
    7. 内部类使用外部参数为什么要变成final?
      答:
      【问题场景】
      设方法useMyInterface被调用,从而在它的调用栈中生成了变量number,此时产生了一个局部内部类对象myInterface,它访问了该局部变量number .
      当方法useMyInterface运行结束后,局部变量number就已死亡了,不存在了.
      但局部内部类对象myInterface还可能一直存在(只能没有人再引用该对象时,它才会死亡),它不会随着方法useMyInterface运行结束死亡.这时出现了一个"荒唐"结果:局部内部类对象myInterface要访问一个已不存在的局部变量number
      【java解决办法】
      通过将局部变量"复制"一份,复制品直接作为局部内部类的数据成员.这样:当局部内部类访问局部变量 时,其实真正访问的是这个局部变量的"复制品"(即:这个复制品就代表了那个局部变量).因此:当运行栈中的真正的局部变量死亡时,局部内部类对象仍可以 访问局部变量(其实访问的是"复制品"),给人的感觉:好像是局部变量的"生命期"延长了.
      【为什么要将外部局部变量设置为final?】
      答:为了保证变量的一致性。这里分两种情况讨论:
      (1)基本数据类型。当变量是final时,由于其值不变,因而:其复制品与原始的量是一样.语义效果相同
      若:不是final,就无法保证:复制品与原始变量保持一致了,因为:在方法中改的是原始变量,而局部内部类中改的是复制品
      (2)引用类型。 变量是final时,由于其引用值不变(即:永远指向同一个对象),因而:其复制品与原始的引用变量一样,永远指向同一个对象(由于是 final,从而保证:只能指向这个对象,再不能指向其它对象),达到:局部内部类中访问的复制品与方法代码中访问的原始对象,永远都是同一个即:语义效 果是一样的。

    答:

    相关文章

      网友评论

        本文标题:实习笔记17.07.13(内部类使用局部变量要加final)

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