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