0

我有一个自定义搜索内容提供程序,它结合了最近的搜索和进行网络 REST 调用的特定结果。

问题是,如果网络挂起或速度很慢,则不会返回任何结果。我想知道是否有办法逐步返回结果......在我的情况下,立即返回以前的搜索,并在可用时返回网络搜索结果。

我不知道这怎么可能,因为这似乎是一个拉模型。UI 组件正在请求搜索结果,并且无法知道何时重新请求以获取基于网络的结果……即使我可以理解挂钩以使其重新请求结果。

有任何想法吗?

4

1 回答 1

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);
        }
    }
于 2013-03-18T18:26:41.697 回答