Android 9.0Settings搜索功能分析

Android 9.0 的 Settings 搜索功能,算是系统里一个蛮核心的体验点了。你点开设置,搜索个 Wi-Fi 啊、蓝牙啊,其实背后流程挺复杂,但设计得还挺清晰。源码主要在SettingsIntelligence里头,里面拆分得细,每个类负责自己的活,改起来也比较灵活。

搜索是从SearchActivity跳到SearchFragment开始的,前端展示用RecyclerView,背后数据是用SearchFeatureProviderImpl调的,还用了LoaderManager做异步加载,响应也快,不会卡。你要是改 UI 交互,改SearchFragment那块就行。

数据是咋来的呢?初始化的时候会跑一堆SearchQueryTask,每个任务负责一个数据源,像DatabaseResultTask就是查本地数据库的,InstalledAppResultTask能把 App 也加进来。关键是这些任务都是从FutureTask继承的,线程安全也做得到位。

数据库的内容怎么填?这块用的是updateIndexAsync异步跑的,调用了queryIntentContentProviders,从系统里挨个 ContentProvider 拉数据,都塞进自家的 SQLite 里。蛮有意思的是SettingsSearchIndexablesProvider,就是个专门负责喂搜索用数据的 Provider,你可以自己搞一个,实现接口就行。

想改内容来源,比如让某个 App 里的设置项也能搜到?那就得自定义SearchQueryTask,再配合SearchResultLoader返回新数据。还可以改SettingsSearchIndexablesProvider或者新增一个自己的 Provider,你想加的数据。整体来说,结构还是挺清楚的,改哪块,看你想实现啥功能。

如果你也在搞 Android 系统定制,是要改设置搜索那块,这份文档真心推荐看看,源码路径、逻辑链路、可扩展点全都说得挺清楚。不看源码都能理出七八分逻辑,动手也有底气。

docx 文件大小:1.39MB