android都图片mat_Android内存泄露整理
为什么会产生内存泄漏?
当一个对象已经不需要再使用了,本该被回收时,而有另外一个正在使用的对象持有它的引用从而导致它不能被回收,这导致本该被回收的对象不能被回收而停留在堆内存中,这就产生了内存泄漏。
内存泄漏对程序的影响?
内存泄漏是造成应用程序OOM的主要原因之一!我们知道Android系统为每个应用程序分配的内存有限,而当一个应用中产生的内存泄漏比较多时,这就难免会导致应用所需要的内存超过这个系统分配的内存限额,这就造成了内存溢出而导致应用Crash。
一、 Activity 泄漏
1、Activity 泄漏通常是内存泄漏的一种。为什么会泄漏呢?如果你持有一个未使用的 Activity 的引用,其实也就持有了 Activity 的布局,自然也就包含了所有的 View。最棘手的是持有静态引用。别忘了,Activity 和 Fragment 都有自己的生命周期。一旦我们持有了静态引用,Activity 和 Fragment 就不会被垃圾回收器清理掉了。这就是为什么静态引用很危险。
2、如何避免 Activity 泄漏?
- 移除掉所有的静态引用。
- 考虑用 EventBus 来解耦 Listener。
- 记着在不需要的时候,解除 Listener 的绑定。
- 尽量用静态内部类。
- 做 Code Review。个人经验:Code Review 能很早的发现内存泄漏。
- 了解你程序的结构。
- 用类似 MAT,Eclipse Analyzer,LeakCanary 这样的工具分析内存。
- 在 Callback 里打印 Log。
二、滑动
实现流畅滑动的技巧:UI 线程只用作 UI 渲染。这一条真谛能够解决 99% 的滑动卡顿问题。不要在 UI 线程做下面的事情:
- 载入图片
- 网络请求
- 解析 JSON
- 读取数据库
做这些操作是很慢的,像图片,网络,JSON考虑用现成的库,有很多社区提供的解决方案,数据库考虑下用 Loader,支持批量更新和载入
参考文档 Android memory profiler的使用
(Android Studio 3.0)Android Profiler内存泄漏检查blog.csdn.net
android都图片mat_Android内存泄露整理相关推荐
- Android中常见的内存泄露
内存泄漏是指无用对象(不再使用的对象)持续占有内存或无用对象的内存得不到及时释放,从而造成内存空间的浪费称为内存泄漏.内存泄露有时不严重且不易察觉,这样开发者就不知道存在内存泄露,但有时也会很严重,会 ...
- Android使用Handler造成内存泄露的分析及解决方法
Android使用Handler造成内存泄露的分析及解决方法 参考文章: (1)Android使用Handler造成内存泄露的分析及解决方法 (2)https://www.cnblogs.com/xu ...
- Android | 如何计算图片占用内存的大小
前言 对于一张图片,你知道应该存放在那个资源目录下面吗,或者说,放在那个资源目录下加载起来更省内存呢?在日常开发中我们可能不太注意这些东西,但是这些却是基础,是必不可少的一环,所以这几天重新温习了一下 ...
- Android大图片导致内存问题小结
在网上看了部分Android中OOM的问题,现在根据理解,做一下笔记. Android OOM 产生的几种原因 1. 程序中使用了太多自己创建的Bitmap. 这种情况通常是最好解决的. 因为你明白你 ...
- Android下常见的内存泄露
转自:http://www.linuxidc.com/Linux/2011-10/44785.htm 因为Android使用Java作为开发语言,很多人在使用会不注意内存的问题. 于是有时遇到程序运行 ...
- Android下常见的内存泄露 经典
转自:http://www.linuxidc.com/Linux/2011-10/44785.htm 因为Android使用Java作为开发语言,很多人在使用会不注意内存的问题. 于是有时遇到程序运行 ...
- Android性能优化(1) 内存泄露 amp; 解决方案
前言 在Android中,内存泄露的现象十分常见:而内存泄露导致的后果会使得应用Crash 本文 全面介绍了内存泄露的本质.原因 & 解决方案,最终提供一些常见的内存泄露分析工具,希望你们会喜 ...
- Android 中图片占用内存分析
Android 在加载图片的时候一定会考虑到的一个点就是如何防止 OOM,那么一张图片在加载的时候到底会占用多少内存呢?有哪些因素会影响占用的内存呢?知道了这些,我们才能知道可以从哪些点去优化,从而避 ...
- Android之AsyncTask的内存泄露问题
AsyncTask是Android提供的一种用于异步处理数据的异步类,使用AsyncTask可以不用直接使用Thread和Handler来处理后台操作.AsyncTask被引入到Android中就被贴 ...
最新文章
- 阮一峰react demo代码研究的学习笔记 - demo 3 debug
- 造句简单_造句游戏的心理投射:被现代心理学摒弃的网红心理游戏
- Java中Integer.parseInt()用法
- 创建单IP的***网络
- 你的 GNN,可能 99% 的参数都是冗余的
- Java 方法使用总结(重载、数组输出、enum和switch、foreach和迭代器、可变长度参数、重载中使用可变长度参数)
- 多用途响应式ppt资源下载平台-html模板
- 【WPF】如何保存RichTextBox的文本到数据库?以及如何对RichTextBox的Document做绑定?...
- gRPC创建Java RPC服务
- django本地安装mysql_Ununtu 15.04 安装MySql(Django连接Mysql)
- 在线2-36进制转文本工具
- python hdf5 —— h5py
- 转:能和LoadRunner匹敌的VS2010/2012Web负载测试
- XShell6免费版获取(个人版)
- 导致301状态码的可能的原因
- 苹果手机备忘录html转pdf,苹果手机自带的扫描仪,一键便能转成PDF文件,你不会才知道吧...
- Gallery中,取消惯性滑动,滑动一次只切换一个视图
- hive插件 ranger_Ranger Hive-HDFS ACL同步
- 默认语言及Android平台语言支持状态(印度语)Android N 设置中语言列表介绍
- Charles抓包出现unknown问题