我有一个有按钮的活动。单击该按钮将启动asynctask并在活动上显示进度加载器。
这个asynctask有一些事情要做,但在此之前,它必须确保应用程序的所有IntentService
已完成处理其队列中的意图。
我通过创建一个锁定对象来解决这个问题,如下所示。
public class Lock{
private boolean isLocked = false;
public synchronized void lock()
throws InterruptedException{
while(isLocked){
wait();
}
isLocked = true;
}
public synchronized void unlock(){
isLocked = false;
notify();
}
}
正在执行某项操作的目标服务将创建Lock
的实例。它将锁保存在公共静态字段中,以便其他人可以访问它。它将在onCreate()
中调用上方对象的锁定,并在onDestroy()
中调用unlock。 asynctask将在同一个lock
对象上调用Lock
。
这里的期望是我的asynctask将等待unlock()
在服务的Lock
中的onDestroy()
对象上调用。
但是我面临的问题是永远不会在IntentService上调用onDestroy()
。 Android将anr抛向ANR in <pkg> Reason: Executing service
。
有人可以在我的理解和实施中指出问题吗?