如果仅执行AsyncTask,是否需要java BroadcastReceiver唤醒锁?
我有一个类,它从BroadcastReceiver
扩展并从AlarmManager
调用。在onReceive
方法中,我执行一个AsyncTask
,它从internet获取一些数据,并将数据存储在应用程序的本地数据库中
我是否需要通过以下方式获得wakelock:
@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();
}
为了停止CPU休眠,或者在没有唤醒锁的情况下执行AsyncTask
安全吗
# 1 楼答案
我建议你阅读有关receiver lifecycle的文件。如果onReceive()方法返回,那么进程可能会被终止,您试图做的不是好的实践。因此,您的任务无法完成工作。因此,您应该启动一个服务/IntentService来运行任务并使流程保持活动状态
# 2 楼答案
BroadcastReceiver文档中的OnReceive方法reference表示:
因此,最好用service替换AsyncTask,然后从OnReceive方法调用此服务。即使广播接收器被杀死,您的服务仍将继续运行