Android:WakefulIntentService不会释放唤醒锁定

时间:2013-05-11 12:56:30

标签: android commonsware-cwac

以下是我在BroadCastReceiver中使用的代码:

public class SMSBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) { 
        // SMSReceivedService is my custom service, extends from Service class  
        Intent myIntent = new Intent(context, SMSReceivedService.class);
        myIntent.putExtras(intent);
        WakefulIntentService.sendWakefulWork(context, myIntent);
    }
}

public class SMSReceivedService extends extends WakefulIntentService {
    public SMSReceivedService(String name) {
        super(name);
    }

    @Override
    protected void doWakefulWork(Intent intent) {
        // main code here
    }
}

以下是WakefulIntentService

中的一段代码
synchronized private static PowerManager.WakeLock getLock(Context context) {
    if (lockStatic == null) {
        PowerManager mgr =
                (PowerManager)context.getSystemService(Context.POWER_SERVICE);
        lockStatic=mgr.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, NAME);
        lockStatic.setReferenceCounted(true);
    }
    return(lockStatic);
}

public static void sendWakefulWork(Context ctxt, Intent i) {
    getLock(ctxt.getApplicationContext()).acquire();
    ctxt.startService(i);
}

使用WakefullIntentService的人知道这一点,只需致电sendWakefulWorkWakefullIntentService即可在后台执行所有操作。但是在上面的代码中,WakefullIntentService只是保持唤醒锁,但在完成后,我没有看到任何释放此锁的代码。这是真的吗?所以它会影响Android用户。请给我一些想法。

1 个答案:

答案 0 :(得分:2)

您使用我的WakefulIntentService,或者您使用相同名称发明了自己的WakefulIntentService。如果您使用的是我的onHandleIntent(),则锁定会在{{1}}中释放,您可以通过阅读the source code来了解。