我正在开发一款可以处理多个电子邮件帐户,POP3和IMAP的Android APP。当前APP,要检查电子邮件,请打开APP并单击更新功能。这会记录到每个电子邮件帐户,并检查是否有新邮件。虽然这有效,但我们需要更有效,及时地检查新消息。
起初我认为PUSH是要走的路,但从我在这里读到的,这可能并不理想......特别是有多个IMAP账户。如果我理解正确,它会使每个IMAP连接保持长期开放,这可能会导致其他一些问题,并且不确定我是否可以将它与POP3帐户一起使用。
我将POLL作为替代方案,但也存在潜在问题。这涉及频繁启动频率并进行帐户“检查”,所花费的时间以及所有这些都会影响电池续航时间。此外,似乎有几种不同的“方式”来安排POLL选项(AlarmManager,JobScheduler和SyncAdapter)...我假设一个可能比另一个更好...特别是新版本的Android让你在一天的某些时间“安静”你的设备。
所以问题是,根据我们的目标,哪种方法可以更好地处理这种能力?我倾向于PUSH(格式......仍然不确定),但不想浪费数小时的时间来发现我走错了路。
感谢任何建议。
答案 0 :(得分:0)
IMAP支持IDLE Command,其中客户端充当被动实体,依赖/依赖服务器来通知帐户中新邮件的到达。但正如你正确地发现,如果由于任何可能的原因而受到干扰,它将保持连接打开以及重建连接的其他问题。
POP不向客户提供此类被动功能。客户端必须从服务器中提取邮件。
根据我的经验,客户端帐户的完全同步不是问题,但需要处理太多事情,例如解析邮件内容,维护帐户文件夹中的活动邮件列表,等。
[1]非常简单的同步机制就是简单地显示MailList
,每当点击一条消息然后动态加载邮件内容。
MailList
=帐户文件夹中邮件条目的排序顺序。
Single Mail Entry
= Sender
+ Mail Subject
+ Mail Date & Time
+ Mail Size
这种最初显示MailList并按需提取邮件内容的方法可以通过以下两种方式实现:
IMAP(FETCH主题,INTERNALDATE,发件人,大小)和
POP(TOP nm {TOP是一个POP命令,可以获取m
个nth
邮件正文的行数以及nth
邮件的完整MailHeaderSection })。之后可以解析MailHeaderSection并构建MailList。
[2]只需获取完整邮件并相应地存储。现在,按需解析它并将其显示给用户。这两者都很容易支持:
IMAP(FETCH BODY.PEEK [])
POP(RETR n)
我喜欢这种方法,因为它很简单。
上述两种方法都在工作,就好像客户端是活动实体(按需提取邮件)。