
如何定位和解决Android的内存溢出问题(大总
2个回答
展开全部
一、定位内存泄漏:
可以用LeakCanary:检测所有的内存泄漏
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0509/2854.html
二、解决:
1.对各种流,文件资源这些比如:InputStream/OutputStream,SQLiteOpenHelper,SQLiteDatabase,Cursor,文件,I/O,Bitmap图片等操作等都应该记得显示关闭。
2.尽量避免static成员变量引用资源耗费过多的实例,比如Context。因为Context的引用超过它本身的生命周期,会导致Context泄漏。所以尽量使用Application这种Context类型。
3.使用线程池,不要newthread
4.UI视图检查,减少视图层级(hierarchyviewer)。
5.图片优化
6. 重用系统资源:系统定义id,系统图片,系统布局,系统style,系统字符串,系统颜色定义
可以用LeakCanary:检测所有的内存泄漏
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0509/2854.html
二、解决:
1.对各种流,文件资源这些比如:InputStream/OutputStream,SQLiteOpenHelper,SQLiteDatabase,Cursor,文件,I/O,Bitmap图片等操作等都应该记得显示关闭。
2.尽量避免static成员变量引用资源耗费过多的实例,比如Context。因为Context的引用超过它本身的生命周期,会导致Context泄漏。所以尽量使用Application这种Context类型。
3.使用线程池,不要newthread
4.UI视图检查,减少视图层级(hierarchyviewer)。
5.图片优化
6. 重用系统资源:系统定义id,系统图片,系统布局,系统style,系统字符串,系统颜色定义
展开全部
内存溢出的错误,没办法根据错误日志定位到哪一行,但是只需要了解内存溢出可能出现的原因定位错误还是不难的。
1、代码编码不合理,错误的引用,比如Handler中持有Activity对象,但是Handler又在执行长时间的任务,就会造成Activity内存泄漏。
2、Bitmap的错误使用,大量使用bitmap却又没有释放,很容易造成内存泄漏。
3、访问数据库Cursor或者数据流忘记关闭也会造成数据泄漏
4、Adapter错误的写法,没有对Item进行复用,也会内存泄漏
5、死循环,无限递归也会造成泄漏
如果实在找不到,可以借助内存分析的工具,AndroidStdio,和Eclipse中都有,或者第三方都可以。
1、代码编码不合理,错误的引用,比如Handler中持有Activity对象,但是Handler又在执行长时间的任务,就会造成Activity内存泄漏。
2、Bitmap的错误使用,大量使用bitmap却又没有释放,很容易造成内存泄漏。
3、访问数据库Cursor或者数据流忘记关闭也会造成数据泄漏
4、Adapter错误的写法,没有对Item进行复用,也会内存泄漏
5、死循环,无限递归也会造成泄漏
如果实在找不到,可以借助内存分析的工具,AndroidStdio,和Eclipse中都有,或者第三方都可以。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询