我正在开发一个应该在后台定期(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);
}
}
<...>
}
或者没有实际的定时器可能有另一种方法可以做到这一点? 任何想法?
答案 0 :(得分:0)
原因可能是,因为你告诉它在服务上运行,所以可能你的
backgroundTask(Service)可能会在Android操作系统发现它在RAM上变低以便保持其
时被杀死foreGround应用程序运行..再次当它获得Free Ram它再次重新启动服务,所以
可能会一次又一次地重启计时器。
了解更多请阅读.. SERVICE
答案 1 :(得分:0)
首次执行你的时间是0毫秒,后续执行是在10毫秒之后。但是android os可能会停止你的服务进行内部任务管理。所以,当你的服务在一段时间后启动时再次重置计时器。所以,它会立即执行你的任务。这就是问题的原因。 因此,您可以设置首次执行的时间最短时间,也可以使用重复警报。