工作中遇到的坑(五)

作者: 云呆呆 | 来源:发表于2019-06-02 19:39 被阅读1次

    BuildConfig类

    buildConfig可以通过在gradle里面添加

    buildConfigField "boolean", "PROFILER_LOG", "${PROFILER_LOG}"

    会自动生成BuildConfig.java类

    可以用来上报sdk版本号,以及一些gradle的一些参数,以及自动化生成常量类


    圆角dialog

    首先继承dialog

    设置view的xml,并且设置以下主题

    super(context, R.style.private_video_dialog);

    <style name="private_video_dialog" parent="@android:style/Theme.Dialog">

        <item name="android:windowBackground">@color/transparent</item>

        <item name="android:windowFrame">@null</item>

        <item name="android:backgroundDimEnabled">true</item>

        <item name="android:windowNoTitle">true</item>

    </style>

    android:imeOptions

    可以修改键盘的enter键的显示,然后inputText=text,但这样设置就无法换行了

    图片内存小知识:

    2.3之前的像素存储需要的内存是在native上分配的,并且生命周期不太可控,可能需要用户自己回收。 2.3-7.1之间,Bitmap的像素存储在Dalvik的Java堆上,当然,4.4之前的甚至能在匿名共享内存上分配(Fresco采用),而8.0之后的像素内存又重新回到native上去分配(NativeAllocationRegistry),不需要用户主动回收,8.0之后图像资源的管理更加优秀,极大降低了OOM。手机系统可以规定Java最大的堆内存为512,但是不能限制native的内存

    内存泄漏

    刚刚一个BUG让我发现,如果 activity 实现了一个回调接口,然后使用 this 设置给需要回调接口的方法,这种应用场景比较常见,最常见的就是实现 onClickListener 接口,然后 findViewById().setOnClickListenr(this)

    如果,这个回调接口设置到了一个静态对象(单例模式),当 activity finish() 的时候(按返回键,回到桌面),则activity 不会被调用 onDestroy() ,原因可能是 activity 对象还在被引用!

    此时你再点击图标回到应用,onCreate() 再次调用!

    很明显,如果你把资源释放放在了 onDestroy() 里面,就会导致内存泄露!

    那有没有解决办法呢?

    有的 你可以在 onPause() 方法里面判断 isFinishing() ,正常调用 finish() 后 activity 的回调过程是 onPause、onStop、onDestroy ,倘若出现上面的情况,只到 onPause!但是 isFinishing() 标志还是为 true !你可以释放资源了。

    相关文章

      网友评论

        本文标题:工作中遇到的坑(五)

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