首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >BroadcastReceiver Vs WakefulBroadcastReceiver

BroadcastReceiver Vs WakefulBroadcastReceiver
EN

Stack Overflow用户
提问于 2014-10-15 18:41:57
回答 1查看 32.8K关注 0票数 63

有人能解释一下BroadcastReceiverWakefulBroadcastReceiver之间的确切区别吗

在什么情况下,我们必须使用每个接收器类?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-15 19:03:23

BroadcastReceiverWakefulBroadcastReceiver之间只有一个区别。

当您接收到onReceive()方法内部的广播时,

假设,

BroadcastReceiver

如果你启动了一些长时间运行的进程,你不能保证

  • CPU将保持唤醒状态。CPU可能会立即返回休眠状态。

WakefulBroadcastReceiver:

在您启动completeWakefulIntent.之前,

  • It is CPU将保持唤醒状态

示例:

在这里,当您接收广播时,您正在启动一个服务,因为您正在使用WakefulBroadcastReceiver,它将保持wakelock,并且不会让CPU休眠,直到您完成服务内部的工作并触发completeWakefulIntent

代码:

代码语言:javascript
复制
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);
    }
}

class SimpleWakefulService extends IntentService {
    public SimpleWakefulService() {
        super("SimpleWakefulService");
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        // At this point SimpleWakefulReceiver is still holding a wake lock
        // for us.  We can do whatever we need to here and then tell it that
        // it can release the wakelock.  This sample just does some slow work,
        // but more complicated implementations could take their own wake
        // lock here before releasing the receiver's.
        //
        // Note that when using this approach you should be aware that if your
        // service gets killed and restarted while in the middle of such work
        // (so the Intent gets re-delivered to perform the work again), it will
        // at that point no longer be holding a wake lock since we are depending
        // on SimpleWakefulReceiver to that for us.  If this is a concern, you can
        // acquire a separate wake lock here.
        for (int i=0; i<5; i++) {
            Log.i("SimpleWakefulReceiver", "Running service " + (i+1)
                    + "/5 @ " + SystemClock.elapsedRealtime());
            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
            }
        }
        Log.i("SimpleWakefulReceiver", "Completed service @ " + SystemClock.elapsedRealtime());
        SimpleWakefulReceiver.completeWakefulIntent(intent);
    }
}
票数 109
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26380534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档