青杉
青杉
问题内容:强引用、软引用、弱引用、虚引用的区别 ? 所属范围:Java 参考答案: - 强引用:最常见的普通对象引用,只要有强引用的存在,不管该对象是否闲置,垃圾收集器都不会去管理该对象。那什么时候会被回收呢?如果没有其他引用关系,只要超过了引用作用范围或者显示得将引用赋值为null,就可以被回收了。 - 软引用:通过 SoftReference 类实现,它的生命周期要比强引用短一些,当内存不足才会被垃圾收集器回收。 - 弱引用:通过 WeakReference 类实现,它的生命周期比软引用短一些,当垃圾收集器线程扫描到它的时候,不管内存是否不足都会被回收,不过垃圾收集器线程优先级很低,所以不一定会很快回收该对象。 - 虚引用:又叫“幻象引用”,通过 PhantomReference 类实现,你不能通过它访问对象。幻象引用仅仅是提供了一种确保对象被 finalize 以后,做某些事情的机制。这个在日常开发中很少用到。
访问外部文件需要时用fileProvider进行包装
@Alex-Cin 1.接口中是可以声明属性的,声明的属性默认都是public static final ,所以大家通过接口来替代Enum来实现枚举。2.C类实现A、B接口是可以的,只是编译器会提醒你实现的print方法为两个接口相同的方法而已,运行是可以的,因为主要逻辑还是在于你的C实现类。
1. apply没有返回值而commit返回boolean表明修改是否提交成功 2. apply是将修改数据原子提交到内存, 而后异步真正提交到硬件磁盘, 而commit是同步的提交到硬件磁盘,因此,在多个并发的提交commit的时候,他们会等待正在处理的commit保存到磁盘后在操作,从而降低了效率。而apply只是原子的提交到内容,后面有调用apply的函数的将会直接覆盖前面的内存数据,这样从一定程度上提高了很多效率。 由于在一个进程中,sharedPreference是单实例,一般不会出现并发冲突,如果对提交的结果不关心的话,建议使用apply,当然需要确保提交成功且有后续操作的话,还是需要用commit的。
补间动画仅仅对画布操作,新位置并不响应点击事件,原位置响应。属性动画是通过修改view属性实现动画,新位置响应点击事件
String 为字符串常量,一旦创建不可以被修改,是线程安全的;String 类使用 final 修饰符,不可以被继承;String 的长度是不变的。适用于少量操作的字符串。 StringBuffer 为字符串变量,长度是可变的,线程安全。适用于多线程下在字符缓冲区进行大量字符串操作 StringBuilder 为字符串变量,长度是可变的,线程不安全。适用于单线程下在字符缓冲区进行大量字符串操作。 字符串操作在执行速度:StringBuilder > StringBuffer > String
1.触发过程:Activity->Window->DocerView->ViewGroup->View,View不触发再返回由父级处理依次向上推。 2.在每个阶段都要经过三个方法 dispatchTouchEvent(分发)、onInterceptTouchEvent(拦截)、onTouch(处理) 大体流程: Activity中走了Window 的 dispatch,Window 的 dispatch 方法直接走了 DocerView 的 dispatch 方法,DocerView 又直接分发给了 ViewGroup,ViewGroup 中走的是 onInterce 判断是否拦截,拦截的话会走 onTouch 来处理,不拦截则继续下发给 View。到 View 这里已经是最底层了,View 若继续不处理,那就调用上层的 onTouch 处理,上层不处理继续往上推。 推荐一篇介绍非常详细的博客:https://www.jianshu.com/p/38015afcdb58