Giter Site home page Giter Site logo

ireading's Introduction

1. iReading

logo

iReading, an English Learning Android App aims to improve people's English reading experience, which features browsing news/articles, single tapping to fetch the meaning and providing offline/online dictionary.

1.1. demo

demo1

demo2

2. MyApplication

App类,每个进程开启时会调用

  • 加载数据库
    • 文章数据库 daoArticle
    • 离线单词数据库 daoDictionary(默认不可更改)
    • 用户单词收藏数据库daoCollection
  • 加载用户设置文件(目前主要只有文章单次刷新/加载的个数)
  • 注册EventBus进行单进程内收发事件
  • 注册广播用来多进程通信

2.1. MainActivity

打开软件开启的Activity,开启新的进程main,主要完成初始化各Fragment的操作 内含Fragment:

  • ArticleListFragmen(默认显示) 显示文章列表
  • WordSearchFragment 单词搜索
  • CollectionFragment 收藏
    • WordCollectionNestedFragment 单词收藏
    • ArticleCollectionNestedFragment 文章收藏
  • AboutFragment关于

2.1.1. ArticleListFragment 阅读

打开应用后默认显示的Fragment,用于接受文章

  • 侧滑选择源(默认为所有源)
    • 所有源(EventRegistry所提供的全球源,每分钟刷新均能收到全球英文最新资讯)
    • 精品源
      • ("National Geographic", "国家地理");
      • ("Nature", "自然");
      • ("The Economist", "经济学人");
      • ("TIME", "时代");
      • ("The New York Times", "纽约时报");
      • ("Bloomberg Business", "彭博商业");
      • ("CNN", "有线电视新闻网");
      • ("Fox News", "福克斯新闻");
      • ("Forbes", "福布斯");
      • ("Washington Post", "华盛顿邮报");
      • ("The Guardian", "卫报");
      • ("The Times", "泰晤士报");
      • ("Mail Online", "每日邮报");
      • ("BBC", "英国广播公司");
      • ("PEOPLE", "人物");
  • 获取阅读简要信息(下拉刷新,上滑加载)
  • 显示缩略图(缺省为logo),名称,发布的源以及发布时间,其中发布时间由独立线程每分钟更新一次UI
  • 侧滑每一个简要信息可以收藏/取消收藏
  • 点击右上角可以搜索,选择不同的源进行搜索(默认为当前源开始搜索)
  • 双击标题栏返回顶部
  • 点击某个文章进入文章详情(ArticleDetailActivity,为新的进程)

2.1.2. WordSearchFragment 查词

  • 使用离线词库,每页最多显示20个,默认显示从a开始,显示单词(词组)的收藏情况,名称,词性,解释
  • 搜索栏输入可以进行查词,下方会动态更新候选,不用点搜索
  • 可以侧滑每个单词进行收藏/取消收藏
  • 点击某个单词进入单词详情(WordDetailActivity,为新的进程)

2.1.3. CollectionFragment 收藏

显示文章和单词的收藏,分为2个子Fragment

  • WordCollectionNestedFragment 单词收藏
    • 显示已收藏的单词,内容与单词搜索一致
    • 理想情况按时间分类,显示在可折叠窗口。今天新增的在"今天"类中,历史收藏可分为"一周内"、"一月内"、"三月内"、"半年内"、"一年内"、"一年外"……
    • 单词侧滑收藏/取消收藏
    • 右上角点击显示释义/取消释义,方便背单词
    • 点击某个单词进入单词详情(WordDetailActivity,为新的进程)
  • ArticleCollectionNestedFragment 文章收藏
    • 显示已收藏文章,内容与阅读一致(可以考虑时间改为收藏时间)
    • 理想情况按时间分类,显示在可折叠窗口。今天新增的在"今天"类中,历史收藏可分为"一周内"、"一月内"、"三月内"、"半年内"、"一年内"、"一年外"……
    • 单词侧滑收藏/取消收藏
    • 点击某个进入文章详情(ArticleDetailActivity,为新的进程)

2.1.4. AboutFragment 关于

显示关于信息和提供设置

  • 软件名
  • 版本号
  • 作者
  • 设置,点击后跳入SettingsActivity,注意不是新的进程,而与当前MainActivity同一进程
  • (捐赠)

2.2. ArticleDetailActivity

点击文章后(刷新,加载,搜索,收藏)后跳转的Activity,开启新的进程article,显示文章内容。在加载未完毕时出现加载页面,无网络时出现无网络页面,从而进行过渡。

  • ToolBar包括返回上一个Activity(进程),收藏该文章,同时支持侧滑返回
  • 正文内容
    • 文章标题
    • 文章分类
    • 文章源
    • 文章发布时间
    • 图片(如果有)
    • 正文
  • 点击查词:弹出单词简要概述窗口(理想情况可以让用户选择偏好:优先显示离线词库/在线词库/全显示)。在弹出窗口点击任意区域跳转到该单词详情页WordDetailActivity,为新进程
    • 单词
    • 收藏情况(点击可收藏/取消收藏)
    • 音标(如果存在)
    • 朗读(如果存在)
    • 词性
    • 含义

2.3. WordDetailActivity

点击单词后(搜索,收藏,阅读中的弹窗)跳转到的Activity,开启新的进程word或者在word**享(如果这不是第一个点击的单词详情页)

  • ToolBar包括返回上一个Activity(进程),该单词,收藏该单词,同时支持侧滑返回
  • 折叠区
    • 金山词霸源
      • 单词
      • 音标
      • 发音
      • 词性
      • 例句
    • 离线词典源
      • 单词
      • 词性
      • 释义
      • 例句及翻译(如果有)
  • 点击查词,同ActicleDetailActivity,目前只有金山词霸源可以点击,理想情况在折叠区所有单词均可点击
  • 注意,在此界面,弹出任意单词(非本单词)的弹窗后会跳入此单词的WordDetailActivity,即可无限开启单词嵌套查询,注意每次都在该进程中,内存容量会随着Activity的增加而逐渐增大(约每次150Mb),但是由于进程的原因,每次返回均会销毁该进程,因此不会内存泄露。

2.4. SettingsActivity

设置区,点击关于界面中的设置中进入,可以侧滑返回(Toolbar中的返回正在做),注意并非新的进程,而是和MainActivity同一进程

  • 显示当前缓存并可清除(清除的大多为图片缓存),注意,此举不会删除用户任何收藏的数据库。
  • 设置每次刷新/加载的数量,主要用于节省流量用

3. 技术重点

3.1. 进程

总共有三个进程

  • main
    • MainActivity 一打开app即存在,一直在main中存活直到完整退出应用
    • SettingActivity 进入设置后存在,退出后结束,共享main这个进程
  • word
    • WordDetailActivity 所有的单词详情页均在此进程中
  • article
    • ArticleDetailActivity 文章详情页

3.2. 进程创建过程

每个进程的创建过程为

  • 启动新的MyApplication,分配独立的内存区域
  • 启动各自的Activity(注意单词详情页WordDetailActivity开启n个,即该n个Activity共享进程word)
  • 退出后回收所有内存

3.3. 收藏/取消收藏的过程

前提条件是各个进程创建时,MyApplication注册广播接收器(用于多进程) 各个Activity/Fragment创建时,注册EventBus(用于单进程)

  • 点击收藏/取消收藏或者图标
  • 先更新UI(图标切换,字切换)
  • 通过EventBus发出需要更改数据库的事件
    • changeArticleCollectionDBEvent
    • changeWordCollectionDBEvent
  • 当前进程的MyApplication接收,修改数据库
  • 向各个进程广播数据库已被更改,以及更改的内容
  • 的所有存活的不同进程中各自的MyApplication(包括先前发出广播的)的广播接收器通过EventBus告知与收藏相关的Activity/Fragment数据库已被更改,并告知更改的内容
    • ArticleDataSetChangedEvent
    • WordDataSetChangedEvent
  • 与收藏相关的Activity/Fragment通过EventBus得知数据库更改,获取更改的内容,更新UI

3.4. 主要API

  • EventRegistry 获取新闻数据
  • 金山词霸 获取在线词库

ireading's People

Contributors

taoxinyi avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.