一个值很得学习的项目—可用于毕业答辩

前段时间有些兄弟问我没有可用于毕业答辩的项目。呼以前来,我给他们介绍了不少,最近介绍一个适合学习的开源的开源项目——豆瓣客户端git

部分特性

  • Material Design
  • 首页友邻广播
  • 启动速度优化
  • 界面动画
  • 支持屏幕旋转
  • 平板多列视图
  • 支持使用 Custom Tabs 打开网页
  • 支持切换长/短连接显示

放几张效果图吧github

功能架构

导航采用抽屉一级导航 + 选项卡二级导航的方式。工具栏上将显示全局的动做。算法

  • 工具栏
    • 提醒:全部类别的提醒,能够查看历史提醒
    • 豆邮:用户间的邮件往来,但愿鼓励郑重而非聊天。
    • 搜索:当即访问想要的内容。
  • 用户:点击后显示我的页面,至关于“个人豆瓣”。
  • 首页
    • 友邻广播:友邻互动、友邻推荐、系统定制的推荐。
    • 九点:友邻的日记、博客文章等,有深度的内容。
    • 一刻:全站范围的热门内容推荐。
    • 同城:基于地理位置的内容。
    • 线上活动:基于共同兴趣的内容。
  • 读书
    • 分类浏览、首页推荐:入口,以及最有可能发现新内容的地方。
    • 我读:管理本身的读书标记、创造内容。
    • 动态:查看友邻的阅读动态,互动、得到推荐。
    • 豆瓣猜:基于算法的推荐。
  • 电影
    • 相似读书。
  • 音乐
    • 相似读书。
  • 设置:提供应用设置等。

在子页面设计中,豆芽将尽可能鼓励长内容和用心的互动。由于我相信只有豆瓣值得这样尝试。缓存

实现架构

数据层面

应用除了对少数内容进行缓存,其余内容均直接从网络获取。bash

  • 基于 Android 帐户系统提供用户帐户和身份认证。
  • 使用 Retrofit 及部分自定义加强处理网络请求。
  • 使用 Gson 自动填充数据模型。
  • 使用 Glide 加载图片。
  • 使用 DiskLRUCache 及自定义加强对首页数据进行缓存。
  • 使用 EventBus 同步不一样页面间对象状态。

界面层面

  • 使用 Support Library 中的 AppCompat、Design、CardView、RecyclerView 进行 Material Design 实现,在必要时引入/本身写做第三方库以实现部分界面元素和效果。

= 使用框架的 Shared Element Transition 实如今 Android 5.0 以上的界面过渡动画。微信

  • 界面实现通常分为 Activity、Fragment、Adapter 三个模块,分别负责做为容器,发起请求、展现数据和用户交互,以及数据/交互绑定。

实现难点

  • 网络请求网络

    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。

通过自定义窗口背景和其余优化,应用在手机上已经能够达到当即启动的视觉效果。

项目地址

github.com/DreaminginC…

相信本身,没有作不到的,只有想不到的

若是你以为此文对您有所帮助,欢迎入群 QQ交流群 :644196190
微信公众号:终端研发部

技术+职场
技术+职场
相关文章
相关标签/搜索