0

我在 Alarm Receiver on-receive Method中使用了 20 秒Handler Post Delayed Timer 任务。如果我在调用警报接收器 on-receive 方法之前退出应用程序,该应用程序工作正常。如果我在安排 Handler Post 延迟计时器任务后退出应用程序。然后 Handler Post 延迟 Timer 任务在退出应用后自动取消。因此,延迟的 Timer 任务从未在我的应用程序中调用过。

代码片段:

Handler handler= new Handler();
handler.postDelayed(networkRunnable,
                10000);

/**
 * A runnable will be called after the 10 second interval
 */
Runnable networkRunnable= new Runnable() {
    @Override
    public void run() {
        // Called after 10 seconds
        cancelNetworkTask();
        // My Job to do after 10 seconds
    }
};

退出应用程序后,从调用下一个警报接收器的接收方法开始,将安排计时器任务并且工作正常。

我在 Alarm Receiver on-receive 方法中尝试了 goAsync() 。所以这也无助于我解决这个问题。一旦我退出应用程序,我计划的计时器任务就会被取消。

一旦应用程序在警报接收器 on-receive 方法中退出,如何保持计划的处理程序发布延迟计时器任务可用。

请帮助我。

4

1 回答 1

0

如果您使用 AlarmManager 安排 Intent,即使应用程序已关闭,应用程序也会在触发 Intent 时启动。

在您的活动中添加以下内容:

AlarmManager manager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        Intent alarmIntent = new Intent(context, AlarmReceiver.class);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 1, alarmIntent, 0);
        manager.set(AlarmManager.RTC_WAKEUP, 10000, pendingIntent); //set 10 sec

创建一个类 AlarmReceiver

    public class AlarmReceiver extends BroadcastReceiver {
        PowerManager.WakeLock wl;

  @Override
        public void onReceive(Context context, Intent intent) {
            PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
            wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "backgroundwakelock");
            wl.acquire();

    //put your ui update code here
            wl.release();
        }
    }

在 Manifest 文件中添加以下内容

<receiver android:name=".AlarmReceiver"/>
于 2015-01-22T06:46:04.860 回答