内存泄漏Androi
来源:互联网 发布:string数组倒序 编辑:程序博客网 时间:2024/06/05 08:18
一、单例导致的内存泄漏
Android中单例的生命周期和应用一样长。应用不当可能导致内存泄漏
比如当单例总需要传入Context的时候 如果传入的是Activity或者Service等将导致Activity不能被及时的回收
二、静态变量导致的内存 泄漏
与单例一样 因为静态变量存储在方法区方法周期伴随着整个应用的生命周期
所以在当需要传入Context等时,需要特别的注意
public class MainActivity extends AppCompatActivity { private static Info sInfo; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if (sInfo != null) { sInfo = new Info(this); } }}class Info { public Info(Activity activity) { }}
三、非静内部类变量导致的内存泄漏
因为非静态内部类(包括匿名内部类)默认都会持有外部类的引用,这样当内部类的生命周期很长的时候,会导致外部类会不及时
比如Handle 在Activity的时候可能会导致内存泄漏,这样最好采用的是staitc Handler以及软引用
四、未取消注册或者回调导致的内存泄漏
比如Activity当中注册广播 没有在onDestory中取消 那么这个广播会一直存在系统当中。导致内存泄漏
同样的网络请求取消
五、Time TimeTask导致的内存泄漏
有时候用Time+TimeTask做默写定时任务的时候(如有些人会这个做倒数等等 )当没有取消的时候 会一直在等待TimeTask就会导致内存泄漏啦
所以用Handler.postDelay 然后接到后继续发
六、集合中对象为清理
ArrayList和HashMap等会持有对象的应用,当不用是要remove掉
七、资源未关闭导致的内存泄漏
如书入库的Cursor等
八、WebView造成的内存泄漏
关于WebView的内存泄露,因为WebView在加载网页后会长期占用内存而不能被释放,因此我们在Activity销毁后要调用它的destory()
方法来销毁它以释放内存。
Webview
下面的Callback
持有Activity
引用,造成Webview
内存无法释放,即使是调用了Webview.destory()
等方法都无法解决问题(Android5.1之后)。最终的解决方案是:在销毁
WebView
之前需要先将WebView从
父容器中移除,然后在销毁WebView
。详细分析过程请参考这篇文章:WebView内存泄漏解决方法。@Overrideprotected void onDestroy() { super.onDestroy(); // 先从父控件中移除WebView mWebViewContainer.removeView(mWebView); mWebView.stopLoading(); mWebView.getSettings().setJavaScriptEnabled(false); mWebView.clearHistory(); mWebView.removeAllViews(); mWebView.destroy();}
九、属性动画导致的内存泄漏
动画同样是一个耗时任务,比如在
Activity
中启动了属性动画(ObjectAnimator
),但是在销毁的时候,没有调用cancle
方法,虽然我们看不到动画了,但是这个动画依然会不断地播放下去,动画引用所在的控件,所在的控件引用Activity
,这就造成Activity
无法正常释放。因此同样要在Activity
销毁的时候cancel
掉属性动画,避免发生内存泄漏。@Overrideprotected void onDestroy() { super.onDestroy(); mAnimator.cancel();}
- 内存泄漏Androi
- Androi内存泄漏/优化的三板斧功夫
- androi
- androi开发中,如何避免内存泄露
- androi开发中,如何避免内存泄露 .
- 内存泄漏。。。
- 内存泄漏
- 内存泄漏
- 内存泄漏
- 内存泄漏
- 内存泄漏
- 内存泄漏
- 内存泄漏
- 内存泄漏
- 内存泄漏
- 内存泄漏
- 内存泄漏
- 内存泄漏
- 面向对象重载
- iphonex 底部遮挡返回键 解决方法
- 用深度学习keras的cnn做图像识别分类,准确率达97%
- Excel快速转PDF
- [知了堂学习笔记] SSM框架项目中遇到的问题及解决办法_01
- 内存泄漏Androi
- Swfit Array 遍历 map flatMap filter reduce
- sparse coding VS autoencoder
- allegro 小技巧--给一组bus net 分配颜色
- QMediaPlayer多媒体类
- 华为单臂路由配置-Smallbaal的博客
- javax.servlet.ServletException: Could not resolve view with name 'xxxxx'in servlet with name 'xxx'
- Windows密码破解工具ophcrack
- OC学习笔记,几种初始化元素的方式