kotlin.synchronized lazy implement 内存泄漏问题
by lazy { ... }
中传递的lambda表达式可能会捕获它的闭包中使用的上下文的引用,引用会一直被持有直到变量被初始化。
而目前项目中经常这样用:
val dialog by lazy{ SomeDialog(context) }
class SomeDialog(conetxt){ val dialog=Dialog().apply{ // xxx } fun show(){ dialog.setContentView(view) dialog.show() } }
这样子包装起来的话,泄露起来非常容易,dismiss 了,dialog 依旧没有被释放。解决泄露的方法就是 不要长期持有 dialog 对象,需要时再创建。或者把 val 改成 var,dismiss 时置空,show 时创建。
在 ConstraintLayout 中使用 include 标签无效的问题
是我大意了,因为 include 不设置layout_width
和layout_height
也不会报错,于是导致了约束未能生效。
Dialog 适配键盘的升起与落下
主要靠计算以及自己做动画。当然这个计算也有人做了:KeyboardStatusDetector.java
回传相关值自己做 animation 即可。
BitmapFactory.Options中的inDensity,inTargetDensity,inScreenDensity
这个直接看公式即可,压不压呢,怎么压呢,都需要慢慢调:
bitmap的宽=原图片的宽 / inSampleSize * (inTargetDensity / inDensity+0.5f) bitmap的高=原图片的高 / inSampleSize * (inTargetDensity / inDensity+0.5f) bitmap所占内存的大小=bitmap的宽*bitmap的高*每个像素所占内存
参考:https://www.jianshu.com/p/7ede587be4bc
JNI C++ 中传递自定义的对象数组
这个比较麻烦,但是规律并不复杂:
定义一个和 java 层结构一样的结构体,再使用 env -> NewObject 去创建一个 java 对象,再逐个用 env 提供的方法赋值。
可以网上找找 demo,比较麻烦的应该是数组,不过网上也有,一维二维三维都行。
JNI 中 long long 的意思
不怎么写 C++ , 突然看到这个 long long 返回值有点不理解,后来发现是一个加强版的 long 的意思,还有 long long int。
在C++11中,标准要求long long 整型可以在不同平台上有不同的长度,但至少有64位。
参考:https://www.cnblogs.com/DswCnblog/p/5667942.html
其他
发现一个做view 背景的Material组件 ShapeableImageView,有点酷,参考:
Android Notes|玩转 ShapeableImageView
此外还有一个官方的 运用弹簧物理学原理为图形运动添加动画 很多时候官方的这个应该都可以满足需求,我记得以前,我是一点点调的动画,太惨了。
本站由以下主机服务商提供服务支持:
0条评论