Android 遇坑之旅

240 阅读1分钟

记录开发中遇到的各种坑,方便回看复习。

2020/11/12

实现公司日志填写功能的时候,填写完成以后回跳到第一个fragment,fragment会重复加载。

会出现data parcel size错误。

原因:bundle中的数据没有清空,出现了重复add的现象,使用bundle.clear();解决问题

2020/11/17

base64图片列表oom优化

juejin.cn/post/689561…

2020/12/8

在使用room数据库迁移的时候,新增列(属性)的时候,使用“ALTER TABLE TCnAddrBookGroupInfo" + " ADD COLUMN dwgroupcontacternum INTEGER”的语句,但是由于使用@Entity注解的类属性默认都是not null,所以必须加入NOT NULL,同时指定默认值。

完整sql语句

"ALTER TABLE TCnAddrBookGroupInfo" + " ADD COLUMN dwgroupcontacternum INTEGER NOT NULL DEFAULT 0"

2020/12/9

ArrayList 和Vector的主要区别。

vector是保证都是原子操作,所以多线程下单操作是可以保证线程安全的,如果使用复合操作,同时add,remove会导致线程不安全。

arraylist本身线程不安全,可以使用 Collections.synchronizedList() 或者 CopyOnWriteArrayList保证线程安全。

Collections.synchronizedList():

public static <T> List<T> synchronizedList(List<T> list) {
    return (list instanceof RandomAccess ?
            new SynchronizedRandomAccessList<>(list) :
            new SynchronizedList<>(list));
}

CopyOnWriteArrayList:

Copy On Write 也是一种重要的思想,在写少读多的场景下,为了保证集合的线程安全性,我们完全可以在当前线程中得到原始数据的一份拷贝,然后进行操作。JDK集合框架中为我们提供了 ArrayList 的这样一个实现:CopyOnWriteArrayList。但是如果不是写少读多的场景,使用 CopyOnWriteArrayList 开销比较大,因为每次对其更新操作(add/set/remove)都会做一次数组拷贝。