【问题标题】:android: "progressive" custom search providerandroid:“渐进式”自定义搜索提供程序
【发布时间】:2013-02-25 19:08:40
【问题描述】:

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

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

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

有什么想法吗?

【问题讨论】:

    标签: android android-contentprovider android-searchmanager


    【解决方案1】:

    这就是我处理这个问题的方法。内容提供者本身从不访问主请求线程中的网络。相反,它,

    1. 查找查询的缓存结果
    2. 如果有缓存结果,立即返回
    3. 如果没有缓存结果,则启动工作线程查找结果,返回空结果

    当#3 的工作线程完成时,它会广播一个意图。这由托管搜索的活动接收,触发它重新提交相同的搜索。这次当搜索查询到达内容提供者时,结果被缓存,并立即返回。

    唯一的复杂性是如何强制 Activity 在没有用户交互的情况下重新提交搜索。解决方案因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);
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-25
      • 1970-01-01
      • 2015-02-07
      • 2011-01-09
      • 1970-01-01
      • 2021-03-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多