在不泄漏内存的情况下在AsyncTask中保持对ContentResolver的引用是否安全?

时间:2014-10-30 09:26:41

标签: android memory-leaks android-asynctask android-contentresolver

我有一个AsyncTask,我正在运行数据库查询。为此,我的AsyncTask子类包含ContentResolver类型的字段。我想知道它是否安全,或者它是否会导致内存泄漏,例如上下文(AsyncTask and Contexts)?

2 个答案:

答案 0 :(得分:1)

here中我可以看到ContentResolver保留了对创建它的Context的引用(我想),因此您应该像对待任何Context引用一样照顾它。

但是您始终可以从ApplicationContext使用ContentResolver,使用said可以安全使用。

编辑:或者也许您根本不需要存储ContentResolver。您随时可以通过this constructor从现有上下文中创建一个。 (该构造函数甚至不需要上下文,只需传递null,它将自动使用ApplicationContext)

答案 1 :(得分:0)

这是一个解决方案,使用您的应用程序持有的应用程序上下文的静态引用

public class MyApplication extends Application
{
    private static Context context;

    public static ContentResolver getContentResolverStatic()
    {
         return context.getContentResolver();
    }

    @Override
    public void onCreate()
    {
        super.onCreate();
        this.context = this.getApplicationContext();
    }
}

现在只需从Asynctask调用MyApplication.getContentResolverStatic()。