大家都知道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上的LocalSearch_第1张图片

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

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

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

Android上的LocalSearch_第2张图片

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

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

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

Android上的LocalSearch_第3张图片

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

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

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

更多相关文章

  1. Android控件EditText之点击软键盘中的回车键不换行,而是跳到下一
  2. 无废话Android之android下junit测试框架配置、保存文件到手机内
  3. 王家林,云计算,大数据,Hadoop,Android,iOS,HTML5,Linux----王家林一站式
  4. android程序实现简单拨号器功能
  5. Google公布Android数据,年增长250%,每天激活85万台Android设备
  6. 安卓软硬结合,热点技术实践总结:《Android音频口数据通信开发》 |
  7. Android中WebView加载本地Html,与JavaScript与Android方法相互传
  8. [Android]设置Activity为全屏显示的两种方法

随机推荐

  1. 全网最硬核PHP面试题来了 2021年学习面
  2. 【鸿蒙学院】鸿蒙IDE迎来重大更新,新特性
  3. 阿里云 RTC QoS 弱网对抗之变分辨率编码
  4. 校园网络时钟系统(标准化考场时间同步)建设
  5. Android平台 | 零代码快速集成AGC云托管
  6. 0401作业-解构与访问器属性
  7. 如何使用PhotoNinja进行图像之间的复制粘
  8. 论IT安全组的重要性
  9. 20210121 Linux系统及安装
  10. 解锁苹果Mac计算器的隐藏功能,不止加减乘