我正在學習更多關於Android內容提供者的知識,他們是性能。例如,如果我寫我自己的內容提供商(子類的ContentProvider)SQLite的操作,然後我想在一個活動的的onPause()方法做一次手術,然後在我的活動我會做:應該在服務中調用內容解析器(即獨立線程)嗎?
@Override
protected void onPause(){
super.onPause();
// ...prepare myTransactionValues
// This could be anything like insert, bulkInsert, query, delete, etc.
getContentResolver().insert(CONTENT_URI, myTransactionValues)
}
然而,它看起來很喜歡這個數據庫操作正在主線程上完成。工作是在幕後單獨完成的嗎?它應該在它自己的線程中嗎?如果應該的話,是否有推薦的方式(可能是服務)?
爲什麼AsyncTask與服務相反? – AndyB
@BigAndy,'AsyncTask'被設計爲在非UI線程中運行,但可以在運行時更新UI。這對於給予用戶反饋非常有益。另一方面,服務在任務完成之前無法更新UI線程。但我應該更新我的迴應。我將補充一點,「服務」適用於長時間的任務,例如從遠程服務器下載圖像。 – Phil
感謝您澄清。因此,要回答我原來的問題,您說內容解析器調用不在幕後自己的線程中運行。所以推薦的方法是將它們放入一個AsyncTask包裝器而不是一個Service。這將允許更新UI而不會使UI線程性能下降。正確? – AndyB