使用线程锁时不会调用IntentService上的onDestroy

时间:2015-04-13 10:40:55

标签: android multithreading android-asynctask android-intentservice

我有一个有按钮的活动。单击该按钮将启动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

有人可以在我的理解和实施中指出问题吗?

0 个答案:

没有答案