其他分享
首页 > 其他分享> > android-支持库中的WakefulBroadcastReceiver vs commonsware的cwac-wakeful

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