杂记

161 阅读3分钟
  • ZonedDateTime 转 Date
new Date(ZonedDateTime.toInstant().toEpochMilli())

JNI

JNI 方法大全及使用示例

blog.csdn.net/afei__/arti…

ARouter

如果要跳转不同模块的activity,也要在主模块中引用一次要跳转activity所在的模块。

组件化

在其他模块中使用的xml名字也不要和其他模块的xml重名,在编译时会被主模块覆盖,导致运行时的xml引用不对。

ClassLoader相关

  1. findClass是在当前classloader对象的配置信息中查找,涉及的范围低
  2. loadClass除了在当前classLoader中寻找还会去parentClassLoader中调用loadClass寻找,但findClass不会。

注意

  • 在library的模块中,不能使用switch + R.id这样的形式,要使用if + R.id形式,因为switch的case需要R.id是固定值,但是R.id在library的模块中打包到application时会变化
  • 监听器使用相反顺序访问
// since onItemRangeChanged() is implemented by the app, it could do anything, including
// removing itself from {@link mObservers} - and that could cause problems if
// an iterator is used on the ArrayList {@link mObservers}.
// to avoid such problems, just march thru the list in the reverse order.
for (int i = mObservers.size() - 1; i >= 0; i--) {
    mObservers.get(i).onItemRangeChanged(positionStart, itemCount, payload);
}

可以解决listeners删除自己报异常的情况。

原因:在 Java 中,ArrayList 是一种基于数组实现的动态数组,它可以自动扩容和收缩,并且支持随机访问。当使用 onItemRangeChanged() 方法更新列表时,如果按相反顺序遍历列表,则可以保证每个元素都是“从后往前”处理的,也就是说,在遍历到某个元素时,该元素之后的元素都已经被处理并移除了。

这是因为 ArrayList 内部维护一个 modCount 计数器,在每次添加、删除、修改元素时都会增加该计数器。当使用迭代器遍历列表时,如果发现 modCount 计数器发生变化,则说明列表已经被修改,迭代器无法继续正常工作。因此,按相反顺序遍历列表可以确保在迭代器遍历期间没有对列表进行修改操作,从而避免了可能出现的问题。

另外,在内存中,ArrayList 中的元素是连续存储的,这也是导致按正序遍历列表可能出现问题的原因。当使用迭代器删除一个元素时,其后面的所有元素都需要向前移动一个位置,以填补被删除元素的空缺。这个过程需要大量的内存操作,可能会影响性能。而按相反顺序遍历列表,可以避免这种情况,因为被删除的元素都是在列表末尾,不需要进行大量的内存操作。

anr

mp.weixin.qq.com/s/fWoXprt2T…

trace 文件导出 www.jianshu.com/p/641e1335a…

ffmpeg

编译

www.jianshu.com/p/73f045be6…

博客

nasdaqgodzilla.github.io/

性能

性能监控

perfdog.qq.com/

动画

svg动画

juejin.cn/post/684490…

View

TextView

滚动效果

需要设置MovementMethod

binding.logContent.setMovementMethod(ScrollingMovementMethod.getInstance());

如果还想滚动时可以获取焦点,需要设置textView的focusableInTouchModetrue

GC 垃圾回收相关

弱引用 WeakRerence

我们平常创建一个WeakReference是这样的:

WeakReference<Any>(ppp())

但是,他还有一个构造函数:

public WeakReference(T referent, ReferenceQueue<? super T> q)

就是去传递一个ReferenceQueue,当垃圾回收执行完毕后,所有被垃圾回收的WeakReference中的对象所在的WeakReference都会传进这里的参数ReferenceQueue。

当我们调用ReferenceQueue.poll()时就可以返回一个被回收的Reference并从队列中删除。

虽然WeakReference里面保存的对象回收了,但是记得要把引用WeakReference的变量置为null,否则该对象无法垃圾回收。

handler

用到了epoll机制,epoll又使用到了管道,管道的使用到了监听者机制,当有数据可以获取时会自动回调用于监听的回调,epoll监听了好几个管道,由于linux视所有为文件,监听时传入文件描述符fd即可。