0

我有一個長期運行的內容提供者,基本上它是在雲&返回一個光標w /結果做一些搜索。我的問題是,這取決於服務器的連接和負載。結果可能需要5-7秒才能返回。停止一個ContentProvider請求

看來,如果我使用內容提供程序進行預測性搜索,它會阻止其他查詢(來自同一活動),直到前一個返回。

關於如何取消提供者查詢的任何建議?

我已經嘗試使用asyncTask &線程,無濟於事。似乎我仍然在提供商(解析器)上被阻止

回答

1

也許您應該僅將內容提供者用於訪問本地SQLite數據庫並在服務中執行長操作。

看一看這個視頻:Google I/O 2010 - Android REST client applications。這是關於構建REST客戶端應用程序,但您可以使用類似的體系結構作爲背景。

+0

想到這個實際上。希望將結果公開給用戶應用搜索。猜猜內容提供商可以連接到該服務。它基本上是在Exchange GAL搜索之後建模的。哪一個是提供者。 – Chrispix

0

看起來像在JellyBean中,有一個新選項可取消()內容提供者查詢。

其實我最終採取您的意見,並改寫了內容提供商獲得光標到sqlitedb,並使用意向的服務來更新數據庫。作品相當不錯的好..

我沒碰上一個問題是,如果提供者被殺害,客戶端似乎不會得到通知,並可能繼續發送服務意圖w /無響應。一些方法來處理這個問題(在提供者中,我可以改變它來做廣播事件w /原始的URI,光標是斷開的,但就是有點慢)..

最後我只是回答我的問題這可能有助於有人在事件提供者就會被殺死,而你是connecte d ...

Content Provider w/ Cursor - Gets Killed (how to notify client)

+0

我只是擔心自己在內容提供者中的異常。你爲什麼擔心內容提供者會在你的代碼之外被殺?*?關於您關注取消對內容提供者的查詢,也許這可能有所幫助:http://stackoverflow.com/questions/13740828/contentprovider-how-to-cancel-a-previous-call-to-delete – 2013-03-27 02:12:50

+0

The因爲您希望客戶知道提供者已被殺害,因爲對遊標的引用將不再更新w /相關記錄。所以客戶端仍然會繼續發送服務意圖,但是它們的光標不會更新。這樣,他們可以檢查提供者/遊標是否仍然有效,並且如果不重新請求新的遊標。 至於擔心我的代碼之外的東西,人們有任務管理器,它可以在技術上殺死提供者,並帶上它的光標。這有助於保持您的應用正常運行並提供最佳用戶體驗 – Chrispix

+0

在這種情況下,我只是告訴用戶,任務殺手不值錢和有害。我也一樣,我一直在用我的應用程序保持很多用戶體驗。但你比我更難。我很佩服你的努力。我確定你的用戶在你的應用上花費很多時間:-) – 2013-03-28 14:04:03