Android - Thread vs AlarmManager

时间:2013-09-26 19:03:32

标签: android multithreading alarmmanager

好的,所以我正在开发一个带有新闻的Android应用程序。当用户第一次运行App时,会运行一个单独的线程,然后启动无限时(true)循环,在一个循环内,连接器将文本从Internet下载到通知并发送此通知,然后休眠8小时。哪种方式更好地使它工作得最好,一个如上所述的线程或报警管理器?或者,也许有不同的更好的方式?

现在我已经做了两种测试方法,两种方法都运行良好,但我不知道如何检查哪一种效率更高,哪种方式不会被android占用,因为它会占用更少的资源等等。

第二个问题,当有人杀了应用程序时,有没有办法恢复循环?我正在使用Advanced Task Killer Free和一个应用程序Flashy(Flash Player Loader)进行测试。我杀死了Flashy,但是5秒后app再次运行,所以它可能是可能的,但是怎么样?

对于那些认为我正在开发烦人广告的人 - 不,我正在开发的应用程序只是从互联网上读取新闻。

希望有人帮忙, 提前谢谢。

2 个答案:

答案 0 :(得分:7)

线程与AlarmManager

<强> AlarmManager

根据Android doc

  

警报管理器适用于您想要的情况   应用程序代码在特定时间运行,即使您的应用程序是   目前没有运行。

所以你在这里获得的优势就是你可以在将来执行特定的任务,即使你的应用程序没有处于运行状态。(在这里,你可以自豪地称自己为优秀的android公民,因为你没有驻留在android内存中来完成你的任务你只是告诉android我希望在特定时间执行此任务,Android会在特定时间自动启动你的应用程序,即使它没有运行。

如果你想用线程做同样的事情那么你的线程应该是活着的,直到时间任务没有开始执行。(缺点是android不会杀死线程,直到时间进程活着你的胎面将不必要吃记忆)。

希望这能清除你的怀疑。

答案 1 :(得分:1)

在你的情况下,我肯定会使用报警管理器。 作为一般经验法则,如果您的应用程序“休眠”并定期检查新内容的时间间隔很长(8小时很长),您应该使用警报管理器。

通过这种方式,您的应用无需在后台运行,从而节省了电池寿命,并且在内存不足的情况下Android会杀死服务,不会影响应用程序的功能。

关于你的第二个问题 - 如果Android系统由于内存不足而导致服务中断,它将尽快重启。但是,如果您手动终止该服务,则不应重新启动它,即使可能通过某些黑客攻击也是如此。