有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如果仅执行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安全吗


共 (2) 个答案

  1. # 1 楼答案

    我建议你阅读有关receiver lifecycle的文件。如果onReceive()方法返回,那么进程可能会被终止,您试图做的不是好的实践。因此,您的任务无法完成工作。因此,您应该启动一个服务/IntentService来运行任务并使流程保持活动状态

  2. # 2 楼答案

    BroadcastReceiver文档中的OnReceive方法reference表示:

    ..you should never perform long-running operations in it (there is a timeout of 10 seconds that the system allows before considering the receiver to be blocked and a candidate to be killed)

    因此,最好用service替换AsyncTask,然后从OnReceive方法调用此服务。即使广播接收器被杀死,您的服务仍将继续运行