GeekBand 第十二周笔记
来源:互联网 发布:300451 创业软件 编辑:程序博客网 时间:2024/05/22 15:36
在 AS 上运行 MemoryBugs-master 项目,寻找潜在的内存问题。
1、 Leaks 显示出错误
sTextView被声明为静态变量,持有mContext上下文的引用,造成内存泄漏。
静态对象,在整个程序运行期间,是不会被垃圾回收的。
静态变量持有 另一非静态对象 的引用,导致这个非静态对象被销毁之后,也不能够被回收,导致内存泄漏 。
解决办法: sTextView取消 static 。
2、Allocation Tracking 检查
看到 MainActivity类中,创造了大量的 Rect, StringBuilder对象。
解决办法:尽量不要在for循环中新建对象。
Rect rect = new Rect(0, 0, 100, 100); String s="-------: " + rect.width(); for (int i = 0; i < 10000; i++) { System.out.println(s); }
3、不要在onDraw()方法中新建对象
因为onDraw()调用频率很高,所以尽量不要在该方法中新建对象。解决办法:在onDraw()方法外新建对象,变成全局变量使用。
private void initView() { mRect = new RectF(0, 0, 100, 100); mPaint = new Paint(); }
避免内存泄漏的方法 尽量不要让静态变量 引用Activity 使用 WeakReference 使用静态内部类来代替内部类 静态内部类使用 弱引用来 引用外部类 在声明周期结束的时候释放资源 减少内存使用 使用 更轻量的数据结构(比如SpareArray代替 HashMap) 避免在onDraw方法中创建对象。(该方法,频率很高) 对象池(Message.obtain()) (相当于对象缓冲) LRUCache Bitmap内存复用,压缩(inSampleSize, inBitmap) StringBuilder 减少了内存使用,垃圾回收就会减少,内存抖动就会减少,使程序使用更加平滑,顺畅。
0 0
- GeekBand 第十二周笔记
- GeekBand 第七周笔记
- GeekBand第八周笔记
- GeekBand第九周笔记
- GeekBand第十周笔记
- GeekBand第十三周笔记
- GeekBandboolanC++ 笔记第二周
- GeekBand C++STL第二周笔记
- GeekBand C++ 设计模式 第二周笔记
- GeekBand笔记-《C++设计模式》第二周
- GeekBand笔记-《C++设计模式》 第三周
- geekband android #5 第十二周分享(GC、内存优化、过度绘制等)
- GeekBand C++学习笔记
- Geekband-second week笔记
- GeekBand第十一周笔记
- GeekBand 第十四周笔记
- GeekBand C++ STL与泛型编程 第五周笔记
- GeekBand C++ STL与泛型编程 第六周笔记
- 编写一个程序,用于接收用户输入的数,然后显示从0到该数为止表示的所有字符,询问用户是否愿意再次继续同样的过程
- python 抓取ASP.NET平台信息 __VIEWSTATE
- Lucene学习笔记之(六)lucene的中文查询
- TCP的三次握手和四次挥手详解
- 《我的第一本互联网消防书》目录
- GeekBand 第十二周笔记
- springmvc——数据类型转换
- 9.Linux的定时任务
- GCD
- Vuejs入门篇
- HDU 2896病毒侵袭 ac自动机
- zb的生日
- CSU 1115 湖南省第八届大学生计算机程序设计竞赛 (最短的名字[字典树])
- WR703N焊TTL线成功,但又遇到问题