(4) 静态内部类,持有对象.
(5) Handler 内存泄漏
系统资源泄露(Resource Leak)
主要指程序使用系统分配的资源比如 Bitmap,handle ,SOCKET等没有使用相应的函数释放掉,导致系统资源的浪费,严重可导致系统效能降低,系统运行不稳定。android画图板在try代码块里创建连接,在finally里释放连接,就能够避免此类内存泄漏。
(1) bitmap资源未释放
(2) IO流未关闭
(3) Cursor使用完后未释放
(4) 各种连接(网络,,socket等)
4.内存泄露的分析工具
在android studio 中有以下几种工具,来进行内存泄漏优化分析(eclipse也有类似工具).
1.Memory Monitor 内存监视器.


2.Dump java heap

3.Android Device Monitor(eclipse系列工具类)

4.第三方库LeakCanary(极其简单)
leakcanary的github地址:https://github.com/square/leakcanary
5.内存泄露的实例解决方案
与其说解决内存泄漏,更应该说是 避免内存泄露 .因为内存泄漏一旦产生,即使需要重启JVM,也就是重启应用,内存重新开始计算。即使这样,也没法解决。
1.单例造成的内存泄露
/**
* Created by ccj on 2016/11/3.
*/
public class SingleExample {
private static SingleExample mExample;
private Context context;
private SingleExample(Context context) {
this.context = context;
}
/**
如果不采用上面的创建线程的方法,而是直接另外写一个实现runnable接口或是继承自thread类的类,这个时候如果想要在新建的线程中发送广播的话,就必须为线程类(暂且这么称呼吧)创建一个接收context对象的构造方法,并且在mainactivity中实例化这个线程类的时候,把mainactivity.this(主类的引用)作为参数传递进去。
flag_no_create:如果当前系统中不存在相同的pendingintent对象,系统将不会创建该pendingintent对象而是直接返回null。
其实是这样的,我们并没有指定taskaffinity属性,这说明和默认值一样,也就是包名,当mainactivity启动时创建的task的名字就是包名,因为mainactivity也没有指定taskaffinity,而当我们启动singletaskactivity ,首先会寻找需要的任务栈是否存在,也就是taskaffinity指定的值,这里就是包名,发现存在,就不再创建新的task,而是直接使用。
the pathname specified may be relative, although it cannot extend outside the current servlet context. if the path begins with a "/" it is interpreted as relative to the current context root. this method returns null if the servlet container cannot return a requestdispatcher.。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/ruanjian/article-89859-3.html
和统一国两制
新生代经济和新生代偶像的完美契合
这生意多好做啊”