簡體   English   中英

AsyncTask與ContentProvider。 訪問SQLite數據庫時要使用什么?

[英]AsyncTask vs ContentProvider. What to use when accessing SQLite database?

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

我做了很多mumbo-jumbo讓它工作 - 一個AsyncTask ,一個interface

我的問題是,編寫我自己的ContentProvider並避免麻煩的AsyncTask是一種更好的方法嗎?

這取決於您以及您的應用程序的計划。

編寫ContentProvider可能會有更多工作,但它會為您可以在應用程序中重復使用的數據提供更加全面,靈活的訪問點。 例如查詢,插入,更新,刪除可通過Uri訪問的方法。

ContentProviders允許您集中和抽象訪問應用程序中的數據庫/其他數據。 這樣,如果db結構發生變化,就會有一個更新用於管理信息的訪問點。 它讓我的經歷變得更加清潔。 此外,如果您決定將信息共享給其他應用程序,ContentProvider實現將使這一切變得簡單。

如果它只是應用程序中單個活動的一次性信息檢索任務,你所擁有的似乎很好。 如果您將在整個應用程序中使用它並在數據庫中更新/插入數據或執行更復雜的查詢,那么制作ContentProvider可能需要額外的時間/復雜性。

還有與此相關的話題另一個很好的討論在這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM