Android开发Android DebugAndroid面试二

如何优雅的使用Context

2018-11-08  本文已影响557人  itfitness

目录

目录

前言

Context在Android中代表上下文对象,正确的理解Context的作用是很重要的,对于不同的Context要区别对待,否则很可能引入问题。

Context的种类

根据Context依托的组件以及用途不同可以将Context分为以下几种。

错误使用Context导致内存泄漏

错误的使用Context可能会导致内存泄漏,典型的例子就是单例模式时引用不合适的Context。

public class SingleInstance {
    private static SingleInstance sSingleInstance;
    private Context mContext;

    public SingleInstance(Context mContext) {
        this.mContext = mContext;
    }

    public static SingleInstance getInstance(Context context){
        if(sSingleInstance==null){
            sSingleInstance=new SingleInstance(context);
        }
        return sSingleInstance;
    }
}

如果使用getInstance传入的是Activity或者Service的实例,那么由于在应用退出之前创建的单例对象会一直存在并持有Activity或者Service的引用,回使Activity或者Service无法被垃圾回收从而导致内存泄漏。正确的做法是使用Application Context对象,因为它的生命周期是和应用一致的。

public class SingleInstance {
    private static SingleInstance sSingleInstance;
    private Context mContext;

    public SingleInstance(Context mContext) {
        this.mContext = mContext;
    }

    public static SingleInstance getInstance(Context context){
        if(sSingleInstance==null){
            sSingleInstance=new SingleInstance(context.getApplicationContext());//使用Application Context
        }
        return sSingleInstance;
    }
}

个人技术部博客:https://myml666.github.io/

上一篇下一篇

猜你喜欢

热点阅读