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

时间:2015-01-04 08:29:31

标签: android broadcastreceiver intentservice commonsware-cwac

我正在使用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是文档。

  1. 他们之间有什么区别?
  2. 我应该在哪里使用commonsware库而不是suport 库中?

1 个答案:

答案 0 :(得分:4)

它们几乎相同。

支持库的WakefulBroadcastReceiver采用部分唤醒锁定,将锁定ID作为额外的Intent放在IntentService中在您完成处理后,必须致电completeWakefulIntent ()。因此,获取和释放是在不同的地方完成的,这有点代码味道。

CommonsWare的WakefulIntentService执行部分唤醒锁本身的获取和释放。

如果您同意在同一个地方进行获取和发布,则可以将常规BroadcastReceiverWakefulIntentService结合使用。

如果你不介意那么多,并认为使用知名图书馆更重要,那么新的开发者(或者你在一年的时间里)不必(重新)学习新东西,然后使用支持库。

<强>更新

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