android-支持库中的WakefulBroadcastReceiver vs commonsware的cwac-wakeful
作者:互联网
我正在使用通用软件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.
>它们之间有什么区别?
>我应该在哪里使用通用软件库而不是suport
图书馆?
解决方法:
它们几乎相同.
支持库的WakefulBroadcastReceiver会获取部分唤醒锁,并将锁ID作为额外的内容放入Intent中,该Intent应该提供给IntentService,在完成处理后必须在该IntentService中调用completeWakefulIntent().因此,获取和发布是在不同的地方完成的,这有点代码味道.
CommonsWare的WakefulIntentService本身负责获取和释放部分唤醒锁.
如果您同意应在同一位置进行获取和发布,则可以将常规的BroadcastReceiver与WakefulIntentService结合使用.
如果您不太介意并且认为使用知名库更为重要,那么新的开发人员(或您一年后的时间)就不必(重新)学习新知识,然后使用支持库.
更新
也是这样:在WakefulBroadcastReceiver的文档中,它警告了中断和丢失唤醒锁的可能性.您需要在IntentService中获取自己的唤醒锁,以防止出现这种情况.使用CommonsWare,您可以仅依靠它来重新获取锁.
标签:intentservice,broadcastreceiver,commonsware-cwac,android 来源: https://codeday.me/bug/20191028/1955233.html