在开发过程当中,咱们常常会遇到RAM不够用的问题,那么咱们应该如何优化咱们的App,使他占用的RAM更少呢?下面,介绍几个方法吧(也能够说是几个原则):api
1、尽可能减小Service的使用: 当你的app须要使用service来处理后台任务的时候,要保证当前的任务完成时,该service也要中止。另外,要注意的是,当中止这个service的时候,不要引发它的泄漏。 当启动一个service以后,系统总会保持这个service处于运行状态。这样,就会占用大量的RAM。因此,app的运行效率就会所以下降。 保留没有用的service最可怕的内存管理错误。因此,必定要牢记,没有必要使用service的时候就不用,用完了必定要记得将它销毁!!!!缓存
2、尽可能动态注册BroadCastReceiver使用: 若是一个BroadcastReceiver 用于更新UI,那么一般会使用这种方法去注册,在Activity启动时注册BroadcastReceiver ,在Activity不可见之后取消注册。app
3、当界面变为不可见时,要记得释放内存: 当用户跳转到其余界面时,而且当前界面再也不可见的时候,要记得释放当前这个界面中的资源。 当用户退出某个界面时,记得在你的activity中实现onTrimMemory()(api4.0及以上)这个回调方法。调用这个方法,系统会收集不须要的内布局
4、当内存变少时,释放内存: 在你的app运行过程当中,当运行该app的设备所剩的RAM变得不多时,系统就会调用onTrimMemory()这个方法,这个方法中有几个参数,表示不一样的状态。onTrimMemory()的具体使用,还请你们参加Android的开发文档吧,本人手懒,就不详细介绍啦。学习
5、检查你所须要使用的内存: 能够经过getMemoryClass()估计一下你的app可用的heap。当你的app所须要的内存超过了这个可用值时,好了内存溢出就出现了。 这里有一个很特殊的方法,能够经过在manifest <application>标签中将largeHeap的属性值设置为true来请求更大的内存,主要注意的是,若是你采用了这种方法,那么当你想要获取可用内存时,就要使用 getLargeMemoryClass()。 不过因为每台机器的RAM是有限的,因此用这个仍是当心吧,不须要用的时候仍是不用了吧。优化
6、避免由bitmap引发的内存浪费:
bitmap仍是很占内存的啊,当咱们使用它的时候必定要当心。有几个须要注意的方法:编码
一、不要直接使用这样会占用很大的内存,使用BitmapFactory.Options设置inSampleSize,根据手机屏幕大小来设置bitmap的大小, 这样作能够减小对系统资源的要求。内存
二、缓存图像到内存,采用软引用缓存到内存,而不是在每次使用的时候都重新加载到内存;资源
三、采用低内存占用量的编码方式,好比Bitmap.Config.ARGB_4444比Bitmap.Config.ARGB_8888更省内存;开发
四、最后就是最重要的一点,当bitmap使用完以后必定要记得回收!!!
7、使用优化过的数据容器 尽可能使用 SparseArray, SparseBooleanArray, LongSparseArray 等通过优化的容器类。一般来讲HashMap的效率时比较低下的。
8、当心使用抽象类(方法) 适当的使用抽象类和方法可以使咱们的代码更加灵活、易维护,可是这样会增长app的内存占用。因此,那些无关痛痒的东西,仍是别抽象了吧。
除了以上列举的方法以外还有一些其余的方法,好比:优化布局,尽可能减小没有必要的layout嵌套,屡次使用一个layout时,可使用<include> 标签,根布局有时候可使用<merge>标签等。 先列举这么多,欢迎你们补充,互相学习