概述
主要说明一下MessagingController类,基本实现了邮件客户端的所有业务逻辑,并提供了对底层实现的统一封装。它实现了runnable接口,可以作为后台线程启动,这个线程在第一次调用该类的单例方法 getInstance(Application application)时构造,之后一直运行,除非在没有服务可执行的情况下才停止。
队列里的任务执行也是在MessagingController类的run方法里处理的,每个要处理的任务可以定义为实现 Runnable 接口的匿名内部类,然后用这个属性保存起来,当 MessagingController 作为一个线程启动的时候,会从这个属性里面逐个提取任务来执行,被执行的任务会在提取的同时从这个属性里删除调用run方法去执行,如果这个过程中报错,会把当前的command再放回到commands,以便下次可以继续执行未执行的command。
放在队列里的任务分为高优先级任务和低优先级任务,阻塞队列的command对象实现了Comparable接口,内部重写了compareTo方法,优先通过Forground来调整队列任务执行的先后顺序,默认则通过sequence(加入队列的顺序)判断,邮件里放到队列里的任务具体描述如下:
Forground任务

doRefreshRemote
描述:列出本地和远程可用的文件夹。该方法调用listFoldersCallback用于返回本地文件夹,稍后会用于远程文件夹再使用。如果没有本地文件夹则通过此方法强制执行。
调用时机:首次登陆、创建账户,刷新文件夹
loadMessageForViewRemote:
描述:从远程服务器拉取邮件信息
调用时机:打开邮件详情时、修复无主题的邮件时
getFolderUnread:
描述:获取文件夹未读数量
调用时机:当邮件列表可见时
非Forground任务
[图片上传失败...(image-bd4bf5-1580895089655)]
synchronizeMailbox
描述:同步指定文件夹
调用时机:首次登陆、删除邮件后(包括邮件列表和邮件详情页面)、加载更多邮件
processPendingCommands
描述:这个表保存需要提交到服务器执行的命令,保证这些命令不会丢失,防止客户端因各种原因退出而导致命令没有被执行的情况发生,从 而确保客户端与服务端数据的一致性
调用时机:设置或同步Flag标识(queueSetFlag也会调用)、清除数据、标记全部已读、移动或复制邮件同步、发送邮件成功后移动邮件到已发送时、删除邮件同步、保存草稿
queueSetFlag
描述:处理Flag标识
调用时机:设置或同步Flag标识(processPendingCommands也会调用)、删除邮件同步
queueExpunge
描述:处理清除数据
moveMessages
描述:移动邮件
调用时机:移动邮件
moveMessagesInThread
描述:移动邮件会话(聚合邮件)
调用时机:移动邮件会话
copyMessages
描述:复制邮件
调用时机:复制邮件
copyMessagesInThread
描述:复制邮件会话
调用时机:复制邮件会话
expunge
描述:清除数据
deleteThreads
描述:删除邮件会话
调用时机:删除邮件会话
deleteMessages
描述:删除邮件
调用时机:删除邮件
emptyTrash
描述:清空垃圾箱
checkMail
描述:检查新邮件
调用时机:收到邮件推送时主动检查一次新邮件、主动拉取邮件(24小时)
finalize sync
描述:邮件同步结束
调用时机:检查新邮件
clear notification flag for
描述:清除邮件通知
调用时机:检查新邮件后
sync
描述:清除邮件通知
调用时机:同步文件夹
compact
描述:账户压缩
调用时机:未使用
clear
描述:清理账户
调用时机:未使用
recreate
描述:重建账户
调用时机:未使用
Push messageArrived of account
描述:服务器推送邮件
网友评论