AsyncTask与ContentProvider。访问SQLite数据库时要使用什么?

时间:2015-12-02 17:04:26

标签: android sqlite android-asynctask

我的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 );
        }
    }
    //----------------------------------------------------------------------------------------------
}  

为了让它发挥作用,我做了很多重大工作 - AsyncTaskinterface

我的问题是,编写自己的ContentProvider并避免麻烦AsyncTask会更好吗?

1 个答案:

答案 0 :(得分:1)

这取决于您以及您对应用的计划。

编写ContentProvider可能会有更多工作,但它会为您可以在整个应用中重复使用的数据提供更全面,更灵活的访问点。例如查询,插入,更新,删除可通过Uri访问的方法。

ContentProviders允许您集中和抽象访问应用中的数据库/其他数据。这样,如果数据库结构发生变化,那么有一个访问点需要更新以便管理信息。它让我的经历变得更加清洁。此外,如果您决定将信息共享给其他应用程序,ContentProvider实现将使这一切变得简单。

如果它只是应用程序中单个活动的一次性信息检索任务,您所拥有的似乎很好。如果您要在整个应用程序中使用它并在数据库中更新/插入数据或执行更复杂的查询,那么制作ContentProvider可能需要额外的时间/复杂性。

还有一个与此主题相关的讨论here