我有一个基于拉的应用程序,必须每隔15秒从服务器拉出一次。为此我使用了普通的AsyncTask,我的代码基本上是这样的:
protected Void doInBackground(Context... arg0) {
while (true && this.pull_on ) {
pull_data();
TimeUnit.SECONDS.sleep(15)
};
现在我遇到了一个大问题,该应用程序只是停止了拉出蓝色。 No exeptions
,AsyncTask的状态是“正在运行”,“pull_on”变量设置为“true”,但它只是停止拉动。
我可以not reproduce
这个,有时会发生,我可以长时间完美地工作然后它就会停止。
有人知道这是怎么发生的吗?
我应该用计时器重构并实现它吗?
使用服务对我所知道的有什么好处?电池供电不是问题。
感谢您的帮助。
P.S。我应该补充说,有时我从AsyncTask开始Activitys。就像这个'ApplicationManager.getCurrentActivity()。startActivity(myIntent)'但我不是一个问题。
P.P.S。
计时器接缝限制为我想要使用的东西,我确实想每隔15秒做一些事情但在某些特殊情况下我想停止ping并再次重新启动它。然后,只需使用AsyncTask执行此操作,对接缝的攻击量就会更多。
答案 0 :(得分:1)
这是一个糟糕的设计。你不希望每15秒在背景上有一个无限循环。当应用程序被推到后台时,这将耗尽电池,这是主要问题之一。
这样做的一个正确方法是发出警报并对此作出反应。计时器也不错。
我建议你考虑将其转移到服务中,这就是它的样子
服务是一个应用程序组件,可以在后台执行长时间运行的操作,但不提供用户界面
它讨论了长时间运行的操作,但是经常性操作也可以转移到服务中。
服务的官方文档在这里:http://developer.android.com/guide/components/services.html