1

我通常编写此代码来启动服务AlarmManager

    intent = new Intent(getActivity(), someservice.class);
    pendingNotificationIntent = PendingIntent.getService(getActivity(), 0, intent, 0);
    alarm = (AlarmManager) getActivity().getSystemService(getActivity().ALARM_SERVICE);
    int interval = 30 * 1000;
    long now = Calendar.getInstance().getTimeInMillis();
    alarm.setRepeating(AlarmManager.RTC_WAKEUP, now, interval, pendingNotificationIntent);

MyAsyncTask是我注册AlarmManager对象的私有类。

如何使用对象调用AsyncTask而不是服务?AlarmManager

PS。如果有更好的方法可以AsyncTask每 X 秒/分钟运行一次,请提出!

4

2 回答 2

1

根据munish-katoch的回复,我有以下具体解决方案。

设置闹钟:

Intent intent = new Intent(context, AlarmReceiver.class);

PendingIntent alarmIntent = PendingIntent.getBroadcast(context, 0, intent, 0);

AlarmManager alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
alarmMgr.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, 
  SystemClock.elapsedRealtime() + 5 * 1000, 60 * 1000, alarmIntent);

上述代码配置AlarmManager为触发 at AlarmReceiver,其定义如下:

public class AlarmReceiver extends WakefulBroadcastReceiver {
  @Override
  public void onReceive(Context context, Intent intent) {  
    new MyAsyncTask.execute();
  }
}

在发生警报AlarmReceiver时启动MyAsyncTask

这里是龙

从 a实例化 an存在生命周期问题,即上述解决方案可能导致过早终止。此外,违反了线程规则AsyncTaskWakefulBroadcastReceiverMyAsyncTask

于 2014-08-07T03:19:28.220 回答
0

您可以这样做:

1.) 定义一个静态意图(intent1)并在设置时间时使用它传递给AlarmManager。所以现在无论何时,都会过去;AlarmManager 将通过发送 intent1 进行通知。

2.) 在intent1 的BroadcastReceiver 的onReceive 上,启动一个AsyncTask。在 AsyncTask 结束时,为 AlarmManager 设置下一次。

于 2013-01-04T19:17:38.863 回答