Android 下的Search

大家都知道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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值