我有一个预定服务(我使用BroadcastReceiver和AlarmManager进行调度)。 该服务使用AsyncTask执行一些长时间运行的操作。
- 连接到服务器
- 检查是否有更新
- 如果存在,则加载更新
- 执行数据更新操作
我从onStart方法中调用任务,如下所示:
onStart(...){
...
new AsyncUpdate(...).execute(...);
}
用户可以手动执行更新操作(按下运行服务的按钮)。那么如果他在执行异步更新任务期间按下按钮,会发生什么情况?根据参考资料,将创建新的工作线程,因此需要进行同步。我使用来自我的服务类的静态参数来实现:
synchronized(MyService.runLock){//public static Object runLock = new Object();
...perform download and update operations
}
这是否正确?
我之前使用过:remote service,所以服务在单独的线程中执行,我不需要在它们之间进行同步,因为我知道只有一个线程。