Android性能优化

收集了一些关系Android性能优化方面你的文章:

###android UI性能优化详解

###Android性能优化典范 - 第3季

  • 枚举注解&枚举类的性能对比

###给 App 提速:Android 性能优化总结

  • 主要介绍几个工具的使用

###内存泄露产生的原因:

  1. 静态集合类引起内存泄漏:

    class A {
    	// 静态集合引用了Object,可能造成泄露;
    	static List<Object> list = new ArrayList<Object>();
    	
    	void fun() { 
    		for (int i = 1; i<100; i++) {
    			Object o = new Object();
    			v.add(o);
    			o = null; 
    		}
    	}
    }
    
  2. 监听器
    调用addXXXListener()等方法来设置监听器,在释放对象的时候却没有记住去删除这些监听器,。

  3. 各种连接

    1. 数据库连接
    2. 网络连接(socket)
    3. io连接
  4. 内部类和外部模块的引用
    非静态内部类持有对外部类的引用。

    public class SampleActivity extends Activity {
    	// 1. 泄露的Handler,匿名内部类mLeakyHandler持有外部类SampleActivity的引用
    	private final Handler mLeakyHandler = new Handler() {
    	    @Override
    	    public void handleMessage(Message msg) {
    	      // ...
    	    }
        }
    	
    	// --------------------------------------------------
    		
    	// 2. 静态内部类SafeHandler
    	private static class SafeHandler extends Handler {
    		// 弱引用,一旦GC就回收
    	    private final WeakReference<Activity> mActivity;
    	
    	    public SafeHandler(Activity activity) {
    		    mActivity = new WeakReference<Activity>(activity);
    	    }
    	
    	    @Override
    	    public void handleMessage(Message msg) {
    			// 判断是否被回收
    	        Activity activity = mActivity.get();
    	        if (activity != null) {
    		        // do something...
    	        }
    	    }
    	}
    }
    
  5. 单例模式
    单例中传入了其他参数,导致该参数对象的生命周期和单例的生命周期相同,造成泄露。

    class A{
    	public A(){
    		B.getInstance().setA(this);
    	}
    }
    
    //B类是单例
    class B {
    	private A a; //持有对A类的引用,造成A类的生命周期和B类相同;
    	private static B instance=new B();
    	
    	private B(){}
    	
    	public static B getInstance(){
    		return instance;
    	}
    	
    	public void setA(A a) {
    		this.a=a;
    	}
    } 
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值