Android中需要手动关闭的地方总结
来源:互联网 发布:dnf韩服武神改版数据 编辑:程序博客网 时间:2024/06/10 15:47
Android中需要手动关闭的地方
在安卓开发中我们都知道,内存申请了就要释放,对象创建了就要回收,初级工程师或者说新手往往在 打开/申请 完某个资源之后,忘记手动关闭,而java和android提供的虚拟机往往不是什么都会自动回收的,当比如网络和文件的io流、Bluetooth、GPS、Cursor,线程等,这时如果不手动回收资源,就会造成系统资源浪费。
new
在activity中,并不是所有new出来的资源都需要管,不涉及系统资源的在java中是不要管的,强引用置null一般是内存到峰值的时候才会有一点用。一般在activity被finish掉的时候,其对应的成员变量也会被置空,从而会被清理掉!如果其对应的数据没有被其他对象引用的话,对应的数据所占空间也会被jvm自动回收掉!不需要去做相关的释放
数据库连接:
一般来说,数据库连接在使用完毕后最好是要关闭一下的,对象A 在事务提交 用完后,db 是要及时关闭的 否则其他对象要引用同一个db对象 会照成db对象被A占用的异常 导致以后执行事务提交不能被正常提交,有人会说,我用的单例模式,只有一个DB对象…这样的话…我不是说“最好”关闭一下嘛。再者,每次数据连接查询后,缓存中都会有积累一些旧数据,每次事务提交后,关闭也可以清空缓存。总之,关总比不关好,何必徒增烦恼呢?
Bitmap
4.0之前的Bitmap数据放在native空间,虚拟机只能回收java层的对象,所以必须主动recycle。
4.0之后的Bitmap数据在虚拟机中,所以不必主动释放。
try…finnaly…
为了尽量避免申请资源没释放的情况发生,所以通常要求将打开操作放到try中,关闭操作放到finnaly中。
但能否使用这种设计还要看具体的业务场景,有得时候try…finnaly…会让设计变得很复杂,甚至有些业务场景完全无法简单的套用try…finnaly…。所以这种要求只能说尽量做到,不能强求。
oom避免方法总结
减少对象内存占用:
1.使用轻量数据结构
2.少用ENUM:比static变量占用内存多几倍
3.减少bitmap内存占用:预加载宽高(inJustDecodeBounds=true),缩小size(缩小2的inSampleSize次幂),改解码方式(一般不太方便),ARGB_8888一个像素32位,换成其他的,但是图片颜色,清晰度什么的会受影响。
内存对象复用:
1.bitmap:LRUCache
2.listview:item view
3.recyclerview:view holder
4.避免在onDraw()等频繁执行的方法内创建对象
5.stringbuilder/stringbuffer
减少内存泄漏
1.优先用application context代替activity context。
2.handler:onDestroy()之前remove掉消息队列中的消息和runnable对象,或者static加weakReference引用外部类。 引用链如下:looper->messagequeue->message->handler->outter class
3.listener的注销
4.cursor,connection关闭。
5.容器中对象泄露。
- Android中需要手动关闭的地方总结
- Android中需要主动关闭的地方
- Android-屏幕适配需要注意的地方总结
- Android组建4:android中需要注意的几个地方
- Android中点击编辑框以外的地方关闭输入法
- android 开发中需要注意内存泄露的地方
- Android Adapter中使用Holder 需要注意的地方
- android应用中去掉标题栏需要注意的地方
- 打开别人的AS工程需要手动修改的地方
- 使用GUI反编译需要手动修改的地方
- push notification需要注意的地方总结
- android开发中需要关闭指定activity的方法
- android 混淆时需要注意的地方
- android自定义view需要注意的地方
- android手势监听需要注意的地方
- android studio快捷键需要注意的地方
- Spring使用中需要注意的地方
- HttpURLConnection使用中需要注意的地方
- OC项目框架目录
- linux修改hostname
- SourceTree 504 Gateway Timeout
- MySQL5.7 union的一个限制
- 自定义tababr,中间有圆角按钮突起
- Android中需要手动关闭的地方总结
- Arduino教程 RFID-RC522读IC卡门禁原理及破解防御
- 线程 上
- Android RecyclerView 使用完全解析 体验艺术般的控件
- git 常用的命令
- setsockopt()函数使用详解
- TCP的三次握手和四次挥手
- Android实现快速索引详解
- Android 拍照、选择图片并裁剪