支持库中的 WakefulBroadcastReceiver 与 commonsware 的 cwac-wakeful

WakefulBroadcastReceiver in support library vs cwac-wakeful by commonsware

我正在使用通用软件 WakefulIntentService 进行唤醒工作。 与使用支持库中的 commonsware library instead of WakefulBroadcastReceiver 相比有什么优势吗?

这是我使用支持库的代码

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 是文档。

  1. 它们有什么区别?
  2. 我应该在哪里使用公共软件库而不是支持 图书馆?

他们几乎是一样的。

支持库的 WakefulBroadcastReceiver 采用部分唤醒锁,将锁 ID 作为额外内容放在 Intent 中,您应该将其提供给必须调用的 IntentService completeWakefulIntent () 当您完成处理时。所以获取和释放是在不同的地方完成的,有点代码味。

CommonsWare 的 WakefulIntentService 自己获取和释放部分唤醒锁。

如果您同意获取和释放应该在同一个地方完成,您可以将常规 BroadcastReceiverWakefulIntentService 结合使用。

如果您不太介意并且认为使用知名库更重要,这样新开发人员(或一年后的您)不必(重新)学习新东西,那么请使用支持图书馆。

更新

此外:在 WakefulBroadcastReceiver 的文档中,它警告可能会被中断并丢失唤醒锁。您需要在 IntentService 中获取自己的唤醒锁以防止这种情况发生。使用 CommonsWare,您只需依靠它即可重新获取锁。