以下是我在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
的人知道这一点,只需致电sendWakefulWork
,WakefullIntentService
即可在后台执行所有操作。但是在上面的代码中,WakefullIntentService
只是保持唤醒锁,但在完成后,我没有看到任何释放此锁的代码。这是真的吗?所以它会影响Android用户。请给我一些想法。
答案 0 :(得分:2)
您使用我的WakefulIntentService
,或者您使用相同名称发明了自己的WakefulIntentService
。如果您使用的是我的onHandleIntent()
,则锁定会在{{1}}中释放,您可以通过阅读the source code来了解。