2013-10-01 39 views
0

我正在實現對數據庫執行查詢的庫函數,並且此查詢可能有時會足夠長,導致在UI線程上執行長操作的StrictMode警告。針對UI線程上的長查詢的Android StrictMode錯誤

我想知道在這裏適用的正確模式是什麼?如何將一個異步調用包裝在一個函數中,該函數的結果應該是同步的?

該函數獲取表名和列,並使用正常的Cursor/resolver.query pattern功能返回布爾值。如果需要,我可以添加代碼。

非常感謝, 安德烈

回答

2

您可以從一個新的ThreadAsyncTask執行一個簡單的Runnable做任何事情。 AsyncTask是「Android方式」;否則,您需要創建一個Handler,以便Runnable(或Thread.run())可以將結果報告回UI線程。 AsyncTask的文檔有很多關於使用的詳細信息,API指南主題Processes and Threads有更多信息。

+0

一個AsyncTask將不可行,因爲主方法只是在不等待AsyncTask完成的情況下退出。 我想 '布爾runIfTrue(Runnable的回調){ 新的AsyncTask(){(...)onPostExecute {如果(結果==真){//運行Runnable的回調}}}}' –

+0

(註釋可不會被編輯)然後我會執行asynctask,然後它將在postExecute中運行回調。 –

+0

@AndreaDellaCorte - 你需要拆分你的「主要方法」,以便從數據庫中獲得結果的部分在'AsyncTask'的onPostExecute方法中執行(或者由'onPostExecute'調用的方法中執行。 )。 –