大家都知道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机制连接的,各模块间关系如下图:

Android 下的Search_第1张图片

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


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

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

Android 下的Search_第2张图片

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

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


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

Android 下的Search_第3张图片

通过桌面上的搜索框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. QtAndroid详解(3):startActivity实战Android拍照功能
  3. android里面的USB功能-----Accessory模式
  4. 数据存储和界面笔记
  5. Android中设置动画循环旋转的方法
  6. 向模拟器发短信打电话的方法
  7. [Android Pro] 完美Android Cursor使用例子(Android数据库操作)

随机推荐

  1. android LinearGradient线性渐变
  2. Android点击通知栏信息后返回正在运行的
  3. Android实现简单加法计算器
  4. android关于时间的demo
  5. Android 一些简单设置
  6. android jbox2d学习笔记一 滑轮关节
  7. Android activity栈 VS WinPhone BackSta
  8. Android: bug: The application may be d
  9. 关于Android studio debug不成功的原因
  10. 20150602_Andriod 向窗体传递参数