Android计时器和更改其周期

时间:2011-08-11 11:16:09

标签: java android timer

我正在开发一个应该在后台定期(10秒)执行某项任务的应用程序。为此,我使用服务和计时器。在计时器中完成的实际工作是:
1)从手机收集数据(使用ContentResolver)到SQLite数据库,
2)使用HttpPost方法同步将此数据发送到远程服务器。

接下来的问题是:经过一些迭代(这些迭代的更改会改变应用程序的每次执行)计时器会更改其周期并开始执行所有任务1-3秒(有时最多9秒,但总是低于10秒)延迟,这在我的情况下太快了,我找不到原因。 有没有人面临类似的行为?

我尝试使用不同的线程在计时器任务中上传和收集,但它没有解决问题。

这是我的代码片段:

public class DataForward extends Service{
private Context con = getBaseContext();
private Timer timer = new Timer();
<...>
@Override
public void onStart(Intent intent, int startId) {
        timer.schedule(new TimerTask(){
        @Override
        public void run() {
            try {
                 updateData();
             NetworkManager network = new NetworkManager(con);
                     if(network.isConnectedToTheInternet())          
                uploadData();

            } catch (Exception e) {
                e.printStackTrace();
            }   


        }}, 0, 10000);
}
}
<...>
}

或者没有实际的定时器可能有另一种方法可以做到这一点? 任何想法?

2 个答案:

答案 0 :(得分:0)

原因可能是,因为你告诉它在服务上运行,所以可能你的

backgroundTask(Service)可能会在Android操作系统发现它在RAM上变低以便保持其

时被杀死

foreGround应用程序运行..再次当它获得Free Ram它再次重新启动服务,所以

可能会一次又一次地重启计时器。

了解更多请阅读.. SERVICE

答案 1 :(得分:0)

首次执行你的时间是0毫秒,后续执行是在10毫秒之后。但是android os可能会停止你的服务进行内部任务管理。所以,当你的服务在一段时间后启动时再次重置计时器。所以,它会立即执行你的任务。这就是问题的原因。 因此,您可以设置首次执行的时间最短时间,也可以使用重复警报。