为了账号安全,请及时绑定邮箱和手机立即绑定

APP性能优化之内存优化

难度中级
时长 1小时15分
学习人数
综合评分9.70
27人评价 查看评价
9.9 内容实用
9.6 简洁易懂
9.6 逻辑清晰
  • shell命令
    查看全部
  • memory
    查看全部
  • 内存优化的意义: 避免oom 可能存在流畅性,响应速度等方面的问题
    查看全部
  • 避免内存泄漏
    查看全部
  • 数据结构的优化处理
    查看全部
  • 1.内存大户:图片
    查看全部
  • 软引用方法解决图片与图片的内存溢出
    查看全部
  • 设置显示图片的中心位置
    查看全部
  • 使用DDMS查看内存
    查看全部
  • 查看内存大小的方法
    查看全部
  • OOM问题优化(下) 通过软引用来优化图片,使用单例模式 下次使用时先判断此图片是否还在,比如是否被回收了,或者第一次加载,就需要重新加载
    查看全部
  • OOM问题优化 1、OOM问题分析 2、强引用、软引用的意义 3、优化OOM问题的方法 4、代码演示 1、OOM问题分析 OOM的必然性与可解决性 OOM绝大多数发生在图片 2、强引用、软引用的意义 1) 如果强引用,必须主动去回收,否则容易出现OOM 若是软引用,系统在不用时自动清理掉 private String strongref; private SoftReference<String> softref; strongref = String.valueOf(Math.radom()); //强引用 softref = new SoftReference(String.valueOf(Math.random())); //弱引用 变量的生命周期和其声明的地方有关,全局和局部,全局的生命周期就是Activity的生命周期,局部就是方法 2)强引用与软引用的使用场景 强引用只能在生命周期结束才能被回收,除非.recycle() 3、优化OOM问题的方法 1)注意临时Bitmap对象的及时回收 2)避免Bitmap的浪费 3)Try catch某些大内存分配操作 4)加载Bitmap:缩放比例、解码格式、局部加载、LRU加载方式 实例: 1)选择图片 2)抽样加载 3)对每个像素的RGB换一下,原来一个像素4个字节,换成2个字节 4)显示部分,可以手指移动 可以参考 之前的例子 http://www.imooc.com/u/1147490/course/489/notes?page=1
    查看全部
  • 笔记五 2、对象复用 1)复用系统自带的资源 2)ListView/GridView的contentView复用 3) 避免在onDraw方法里面执行对象的创建 3、避免内存泄露 内存泄露:由于代码瑕疵,导致这块内存,虽然是停止不用了,但依然被其他东西引用着,使得GC没法对它进行回收。 1)内存泄露会导致剩余可用Heap越来越少,频繁出发GC 实例: private class TestThread extends Thread{ @Override public void run(){ super.run(); while(true){ try{ Thread.sleep(1000*60*5); }catch(InterruptedException e){ e.printStackTrace(); } } } } 以上thread是mainActivity的内部类,会导致thread所在的activity无法被GC回收,因为thread实际上引用了activity的资源 优化 private class TestThread extends Thread{ @Override public void run(){ super.run(); try{ Thread.sleep(1000*60*5); }catch(InterruptedException e){ e.printStackTrace(); } } } 2)尤其Activity的泄露 3)用Application Context而不是Activity Context 4)注意Cursor对象是否及时关闭
    查看全部
  • 笔记四 优化: private void do Churn(){ Log.d("suncj", "doChurn start"); String[] strMatrix = new String[length]; //在外面定义 for(int i = 0; i < rowlenght; i ++){ for(int j = 0; j < length; j++){ strMatrix[j]= String.valueOf(ran.nextDouble()); } Log.d("suncj", "doChurn rowStr:"+i); } Log.d("suncj", "doChurn end"); } 4)再小的Class耗费0.5KB 5)HashMap一个entry需要额外占用的32B
    查看全部
  • 笔记三 APP内存优化方法 1、数据结构的优化 2、对象复用 3、避免内存泄露 4、相关演示 1、数据结构的优化 1)频繁字符串拼接用StringBuilder 字符串通过+的方式进行字符串拼接,会产生中间字符串内存块,这些都是没有用的,而且低效,耗时较长 2)ArrayMap、SparseArray替换HashMap 3)内存抖动 变量使用不当引起的 突然的大量申请内存,然后没多久又弃之不用,过了一段时间,又大量申请内存,像锯齿一样的内存使用效果 实例: int rowlength = 10; //10 行 int length = 420000; private void do Churn(){ Log.d("suncj", "doChurn start"); for(int i = 0; i < rowlenght; i ++){ String[] strMatrix = new String[length]; //大量申请内存 for(int j = 0; j < length; j++){ strMatrix[j]= String.valueOf(ran.nextDouble()); } Log.d("suncj", "doChurn rowStr:"+i); } Log.d("suncj", "doChurn end"); }
    查看全部

举报

0/150
提交
取消
课程须知
最好有一定的android开发基础,并有做过一些app项目
老师告诉你能学到什么?
老师能让你知道内存优化的理论,优化的问题,方法等知识

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!