我的Android应用中有一个简单的数据库,其中包含有关国家/地区的信息。我要做的一件事就是在下拉菜单中填入国家名称。
所以,我写了一些简单的代码:
public class FetchCountryAsync extends AsyncTask<String,Void,Cursor> {
private Context con;
private CountryConsumer consumer;
//----------------------------------------------------------------------------------------------
public FetchCountryAsync(Context con, CountryConsumer consumer) {
this.con = con;
this.consumer = consumer;
}
//----------------------------------------------------------------------------------------------
@Override
protected Cursor doInBackground(String... params) {
CountryDatabaseHelper helper = new CountryDatabaseHelper(con);
Cursor countries = helper.getCountries();
return countries;
}
//----------------------------------------------------------------------------------------------
@Override
public void onPostExecute(Cursor countries){
if(!isCancelled()){
consumer.setCountries( countries );
}
}
//----------------------------------------------------------------------------------------------
}
为了让它发挥作用,我做了很多重大工作 - AsyncTask
,interface
。
我的问题是,编写自己的ContentProvider
并避免麻烦AsyncTask
会更好吗?
答案 0 :(得分:1)
这取决于您以及您对应用的计划。
编写ContentProvider可能会有更多工作,但它会为您可以在整个应用中重复使用的数据提供更全面,更灵活的访问点。例如查询,插入,更新,删除可通过Uri访问的方法。
ContentProviders允许您集中和抽象访问应用中的数据库/其他数据。这样,如果数据库结构发生变化,那么有一个访问点需要更新以便管理信息。它让我的经历变得更加清洁。此外,如果您决定将信息共享给其他应用程序,ContentProvider实现将使这一切变得简单。
如果它只是应用程序中单个活动的一次性信息检索任务,您所拥有的似乎很好。如果您要在整个应用程序中使用它并在数据库中更新/插入数据或执行更复杂的查询,那么制作ContentProvider可能需要额外的时间/复杂性。
还有一个与此主题相关的讨论here。