大家都知道android平台最初是由google推出的,然后google又主导成立了OHA继续推动android的发展。现在搜索应用可能是 使用率最高的一个,google最核心的产品就是搜索,因此android必定要搭载这个功能。本文就介绍一下android上的本地搜索框架。

要说本地搜索,首先就要介绍ContentProvider和ContentResolver这两个android上的重要组件。

ContentProvider
直译就是“内容提供者”,我觉得这个很形象,他就是一个类似于数据源的东西,帮助App或者说帮助整个平台 管理数据。因为android上app间的数据是相互独立的,一个app不可以直接访问另一个app的数据,有了ContentProvider这个机 制,不同app间就可以互相访问数据,而且还不破坏原有的独立性。

ContentResolver
App通过ContentProvider将自己的数据公开,其他App要访问这份数据就要通过 ContentResolver来获取对应的ContentProvider的远程访问方法,然后操作数据。ContentProvider和 ContentResolver之间是通过Binder机制连接的,各模块间关系如下图:

ContentProvider和ContentResolver都提供了一个query()方法,看到这个方法名字大家应该都清楚了,搜索功能就 是通过这个方法实现的。另外,Android上有一个SearchManager模块,是专门用于处理搜索请求的,每个App启动搜索功能时都要通过它。


Android上的搜索功能分三类:
1.网络搜索
2.App内部资源搜索
3.本地全局搜索
其中网络搜索功能没接触过,本文不涉及。

App内部资源搜索
这个功能主要就是应用了ContentProvider和ContentResolver这对组件,如下图:

一个App具有搜索功能,那么它必须有两类Activity:
SearchableActivity   可以启动搜索功能的Activity
QueryActivity       用于完成搜索和显示搜索结果的Activity

SearchableActivity 启动搜索功能时,会调用SearchManager,然后SearchDialog会被创建,就是我们看到的搜索框。在框中输入搜索关键字压下搜索键 后,SearchDialog会启动QueryActivity,ContentResolver的query()方法被调用,最后将搜索结果显示出来, 搜索结束。


本地全局搜索(GlobalSearch)
这个功能的实现主要也是通过ContentProvider和ContentResolver,如下图:

通过桌面上的搜索框widget启动本地全局搜索,同样会创建SearchDialog,SearchDialog将搜索请求发送到 GlobalSearch模块,GlobalSearch通过ContentResolver分别访问各个可检索App的 ContentProvider,最后经过一些异步处理将结果显示在屏幕上。

Android的本地检索功能完全是基于 ContentProvider的,也就是说如果一个App没有创建ContentProvider,这个App的数据就无法被搜索。而且搜索效率完全取 决于各个ContentProvider的query()方法的执行效率,我见过的大多数ContentProvider都是通过数据库实现的,因此搜索 的效率主要取决于Android的数据库sqlite。

本文仅仅描述了搜索功能的大体实现思路,源码还是比较复杂的,这里提到的只是九牛一毛。

http://blog.csdn.net/xiaohuanggougou/archive/2010/03/24/5414002.aspx

更多相关文章

  1. Android(安卓)面试题总结之Android(安卓)基础(二)
  2. 开发Android应用 提升性能的小技巧
  3. Android官方ORM数据库Room技术解决方案简介(一)
  4. android Java 笔试考题
  5. Android(安卓)Application对象必须掌握的七点
  6. Android(二)数据存储和访问 之文件
  7. Android-线程笔记
  8. Android进程与线程基本知识
  9. 了解Android和数据库连接

随机推荐

  1. 3-3
  2. Spring 中优雅的获取泛型信息
  3. mica-captcha 验证码组件
  4. Java Bean Copy 性能大比拼
  5. mica-launcher 启动器
  6. 使用 java9 的 uuid 生成方式让 uuid 生
  7. mica-auto 代码自动生成
  8. Spring boot 微服务核心组件集 mica v1.0
  9. 基于oauth 2.0 开发第三方开放平台
  10. 变量与常量