2017-08-25 102 views
2

我讀了很多帖子告訴長操作(如閱讀數據庫)不應該在主線程上執行。我應該執行插入,刪除,更新我自己的SQLite數據庫內AsyncTaskLoader

到目前爲止,我使用了CursorLoader(用於「閱讀」ContentResolver)和AsynkTaskLoader(用於「閱讀」我自己的SQLite DB)。

我知道 「的」 ContentResolver執行InsertDeleteUpdate我可以使用AsyncQueryHandler

我的問題是:在我自己的SQLite數據庫上執行Insert,DeleteUpdate的最佳方法是什麼?

我是否應該在AsyncTaskLoader的方法loadInBackground()內執行這些操作?

謝謝

+1

使用'AsyncTask'和執行'doInBackground'方法的更新。但是,如果您的更新輕而快速,您可以在UI線程中自由執行它們,讓您的生活變得更輕鬆。 – Dusan

+1

謝謝你:) – MDP

+1

即使是慢速設備也能夠每秒執行幾百次簡單的數據庫操作,所以沒有必要在後臺執行一個或幾個操作。 https://stackoverflow.com/questions/28188164/android-sqlite-performance – Dusan

回答

1

如果你的查詢都是簡單,它不會讓太多的時間來執行,然後簡單地就可以在主線程本身使用它。

如果你正在做大數據處理,那麼你有兩種選擇。

  1. 的AsyncTask

如果你想要的操作後,更新你的用戶界面,您可以使用的AsyncTask做的過程在後臺線程,並將結果傳遞到主線程。欲瞭解更多關於AsyncTaksk請點擊here

2. 主題

如果沒有術後更新UI,你可以簡單地使用主題這樣做的目的。

+0

謝謝你的男人。評估的內容是針對移動設備的「大數據流程」? 保存/刪除/更新100條記錄? 1.000? 1000.000? – MDP

+1

如果我需要查詢超過20條記錄,我將不會使用主線程。 –

+1

我不知道確切的數字。但這不是關於數字,而是關於執行時間。 –

1

您可以使用後臺處理程序線程爲您的目的。

private Handler mHandler = null; // global variable 
private HandlerThread mHandlerThread = null; // global variable 

//創建實例內的onCreate()或你的代碼中另一個地方,因此將被稱爲一個人的。如果需要,你也可以單身,但這不是正確的方法。

mHandlerThread = new HandlerThread("HandlerThread"); 
    mHandlerThread.start(); 
    mHandler = new Handler(mHandlerThread.getLooper()); 

//執行後臺操作,如:

handler.postDelayed(new Runnable() { 
        @Override 
        public void run() { 
         // Do background work here. 

        } 
       }, 2000); 
+0

謝謝你:) – MDP

相關問題