我有一个消耗web服务的asynctask。现在我需要每天执行一次asynctask,在某个小时。 我想要做的是在AlarmManager中调用asynctask的doinbackground事件。我已经阅读了有关使用AlarmManager的内容,但没有关于将其与asynctask一起使用的文档。 我会朝着正确的方向前进吗? 任何建议都会高度赞成
答案 0 :(得分:0)
步骤1:创建一天运行一次的警报管理器。 您可以根据自己的要求设定时间。我把它设置在早上7点。
int REPEATING_TIME = 24 * 60 * 60 * 1000;
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 06);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
Intent i = new Intent(context, DemoService.class);
PendingIntent pi = PendingIntent.getService(context,
202, i,
PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager alarmManager = (AlarmManager) context
.getSystemService(Context.ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
calendar.getTimeInMillis(), REPEATING_TIME, pi);
步骤2:创建一个asynctask类并在那里执行后台操作。
public class LoadData extends AsyncTask<String, String, String>{
@Override
protected String doInBackground(String... params) {
return "response";
}
}
步骤3:创建一个扩展服务的类。
public class DemoService extends Service {
@Override
public void onCreate() {
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
new LoadData(){}protected void onPostExecute(String result){
// anything you want to perform onPost.
};}.execute("API URL");
stopSelf();
return super.onStartCommand(intent, flags, startId);
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
希望它能解决您的问题。