如果仅执行AsyncTask,则需要BroadcastReceiver唤醒锁吗?

我有一个类,它从BroadcastReceiver扩展并从AlarmManager 。 在onReceive方法中,我执行AsyncTask ,它从Internet获取一些数据并将数据存储在应用程序的本地数据库中。

我是否需要获得唤醒锁:

 @Override public void onReceive(Context context, Intent intent) { PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, ""); mWakeLock.acquire(); // execute AsyncTask } private void asyncTaskDone() { mWakeLock.release(); } 

为了阻止CPUhibernate,或者在没有唤醒锁定的情况下执行AsyncTask是否安全?

我建议你阅读有关接收器生命周期的文档。 你要做的不是好习惯,如果onReceive()方法返回进程就可以被杀死。 因此,您的任务无法完成工作。 因此,您应该启动Service / IntentService来运行任务并使进程保持活动状态。

来自BroadcastReceiver文档的OnReceive方法引用说:

..你永远不应该在其中执行长时间运行的操作(系统允许在考虑接收器被阻塞和候选人被杀之前超时10秒)

因此,您最好用服务替换AsyncTask,然后从OnReceive方法调用此服务。 即使broadcastReceiver被杀,您的服务也会继续运行。