我正在使用commonsware WakefulIntentService
做清醒工作。
与使用支持库中的commonsware library代替WakefulBroadcastReceiver
相比有什么优势吗?
这是我使用suport库的代码
import android.support.v4.content.WakefulBroadcastReceiver;
public class SimpleWakefulReceiver extends WakefulBroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// This is the Intent to deliver to our service.
Intent service = new Intent(context, SimpleWakefulService.class);
// Start the service, keeping the device awake while it is launching.
Log.i("SimpleWakefulReceiver", "Starting service @ " + SystemClock.elapsedRealtime());
startWakefulService(context, service);
}
}
public class SimpleWakefulService extends IntentService {
public SimpleWakefulService() {
super("SimpleWakefulService");
}
@Override
protected void onHandleIntent(Intent intent) {
Log.i("SimpleWakefulReceiver", "Completed service @ " + SystemClock.elapsedRealtime());
SimpleWakefulReceiver.completeWakefulIntent(intent);
}
}
This是文档。
答案 0 :(得分:4)
它们几乎相同。
支持库的WakefulBroadcastReceiver
采用部分唤醒锁定,将锁定ID作为额外的Intent
放在IntentService
中在您完成处理后,必须致电completeWakefulIntent ()
。因此,获取和释放是在不同的地方完成的,这有点代码味道。
CommonsWare的WakefulIntentService
执行部分唤醒锁本身的获取和释放。
如果您同意在同一个地方进行获取和发布,则可以将常规BroadcastReceiver
与WakefulIntentService
结合使用。
如果你不介意那么多,并认为使用知名图书馆更重要,那么新的开发者(或者你在一年的时间里)不必(重新)学习新东西,然后使用支持库。
<强>更新强>
此外:在WakefulBroadcastReceiver
的文档中,它警告可能会被中断并失去唤醒锁定。您需要在IntentService
中获取自己的唤醒锁以防止这种情况发生。使用CommonsWare,您可以依靠它来重新获取锁定。