2013-02-25 16 views
0

我有一個自定義搜索內容提供程序,它將最近的搜索和製作網絡REST調用的特定結果結合在一起。android:「progressive」自定義搜索提供程序

問題是,如果網絡掛起或緩慢,則無法返回結果。我想知道是否有辦法逐步返回結果......在我的情況下,立即返回先前的搜索結果,並在網絡搜索結果可用時返回。

我不明白這將是可能的,因爲這似乎是一個拉模型。 UI組件正在請求搜索結果,並且無法知道何時需要重新請求以獲取基於網絡的結果...即使我能夠理解,以便重新請求結果。

有什麼想法? 謝謝。

回答

1

回答我的問題...

這是我如何着手處理這個問題。內容提供者本身從不訪問主請求線程中的網絡。在代替,它,

  1. 查找緩存結果查詢
  2. 如果有一個緩存的結果,返回立即
  3. 如果沒有緩存的結果,啓動工作線程找到結果,並返回空結果

當#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); 
     } 
    } 
相關問題