回答我的問題...
這是我如何着手處理這個問題。內容提供者本身從不訪問主請求線程中的網絡。在代替,它,
- 查找緩存結果查詢
- 如果有一個緩存的結果,返回立即
- 如果沒有緩存的結果,啓動工作線程找到結果,並返回空結果
當#3的工作線程完成時,它會廣播一個意圖。這是由託管搜索的活動接收的,從而觸發它重新提交相同的搜索。這次當搜索查詢到達內容提供者時,結果被緩存並立即返回。
唯一複雜的是如何強制活動重新提交沒有用戶交互的搜索。該解決方案根據Android的版本不同而不同,
public void onReceive(Context context, Intent intent) {
String query = intent.getStringExtra(SearchManager.QUERY);
if (query == null) {
return;
}
// if user has typed something new, ignore
if (!query.equals(searchQuery)) {
return;
}
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.HONEYCOMB) {
SearchView searchView = (SearchView) searchMenuItem.getActionView();
searchView.setQuery(query, false);
} else {
SearchManager sm = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
ComponentName cm = FolderActivity.this.getComponentName();
sm.startSearch(query, false, cm, null, false);
}
}