前段时间有些兄弟问我没有可用于毕业答辩的项目。呼以前来,我给他们介绍了不少,最近介绍一个适合学习的开源的开源项目——豆瓣客户端git
放几张效果图吧github
导航采用抽屉一级导航 + 选项卡二级导航的方式。工具栏上将显示全局的动做。算法
在子页面设计中,豆芽将尽可能鼓励长内容和用心的互动。由于我相信只有豆瓣值得这样尝试。缓存
应用除了对少数内容进行缓存,其余内容均直接从网络获取。bash
= 使用框架的 Shared Element Transition 实如今 Android 5.0 以上的界面过渡动画。微信
网络请求网络
Retrofit 自己已经较为强大,而在豆芽中则对 Retrofit 进行了包装,增长了认证和错误处理等功能,为以后 API 层创建提供了不少方便。架构
磁盘缓存框架
DiskLRUCache 是一个只实现了同步读取写入的库,所以豆芽对其进行了包装,提供了异步读写的 API,正确实现,提升了应用的响应速度。异步
状态同步
因为各个界面独自获取数据,数据自己与常规的 ContentProvider 机制中不一样,是去中心化的,便可能遇到状态不一样步的问题。
具体地说,即有可能用户在广播详情界面中点赞后,回到主界面列表视图,发现并未更新状态。
而豆芽解决方案则是使用 EventBus,在请求完成后通知全部界面刷新同一数据。
界面动画
Android 5.0 以上提供了 SharedElementTransition,然而默认状况下共享的界面元素在动画时却会被放置在其余界面元素之上,致使其忽然越过 AppBar 或 StatusBar 的状况。
经过大量的文档阅读、源代码分析和调试,通过大约一周的时间,最终实现了较为理想的效果。
屏幕旋转
Android 在屏幕旋转时,会销毁视图和 Activity 并重建,此时如何保存视图状态和已加载的数据、正在进行的网络请求便是问题。
Android 对部分视图状态提供了自动保存恢复,而豆芽对于其余须要保存的状态则经过自定义的 onSaveViewState() 和 onRestoreViewState()。
对于数据,豆芽经过自定义的一个无界面的 RetainDataFragment 进行数据保留,而且接口十分简单易用。
同时,因为网络请求的异步特性,豆芽经过自定义的一个 RequestFragment 实现了网络请求在 Activity 重建期间的保留,而且可以在 Activity 重建完成后将请求前的状态和请求结果回调至新的 Activity。
平板适配
Android 自己的资源系统提供了对不一样配置的很好支持,经过创建不一样的资源文件,便可在手机和平板上使用不一样的界面设定。
此外,因为采用了 RecyclerView,经过在运行时判断当前设备配置,能够动态给界面设置为 一、二、3 列视图,充分利用屏幕空间。
启动速度
Android 默认在冷启动应用进程至可以调用 Activity.onCreate() 前会加载应用主题中的背景做为预览,而默认背景是白色,与应用在上部拥有绿色 AppBar 的效果不相匹配。
为了生成适应于不一样屏幕大小、系统版本的图片,我使用 bash 编写了一系列脚本,并实现了一个通用的模板化 SVG 格式,详情见 MaterialColdStart 和 AndroidSVGScripts。
通过自定义窗口背景和其余优化,应用在手机上已经能够达到当即启动的视觉效果。
项目地址
若是你以为此文对您有所帮助,欢迎入群 QQ交流群 :644196190
微信公众号:终端研发部