根据慕尼黑卡托奇 https://stackoverflow.com/users/1751027/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
向AlarmReceiver
,其定义如下:
public class AlarmReceiver extends WakefulBroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
new MyAsyncTask.execute();
}
}
发生警报时AlarmReceiver
starts MyAsyncTask
.
这里有龙
有生命周期问题 https://stackoverflow.com/questions/25174226/is-instantiating-an-asynctask-from-a-wakefulbroadcastreceiver-recommended与实例化相关联AsyncTask
from a WakefulBroadcastReceiver
,即上述解决方案可以导致MyAsyncTask
过早地被杀死。而且,违反了线程规则 https://stackoverflow.com/a/25172977/3664487.