每当最终用户点击“提交”按钮时,我都需要运行一个流程。即使应用程序关闭,应用程序也需要每隔X分钟(Y次)尝试处理屏幕上的数据。因此,它需要尝试进行一些处理,直到出现以下情况之一: 1)对于提交的数据,处理成功 2)处理已重试Y次,但仍未成功 3)操作系统终止应用程序或关闭手机。
如果最终用户的手机仍在,但应用程序已停止, 什么是用于实现此目的的正确接口?
如果我使用Handler / Runnable,只有在应用程序保持活动状态时才有效。 当您希望处理在特定时间运行时,AlarmManager看起来就像是在使用它。
任何建议都将不胜感激!
答案 0 :(得分:2)
我使用此方法设置闹钟。
private void setAlarm(){
Context context = getApplicationContext();
AlarmManager mgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(context, OnAlarmReceiver.class);
PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
myCal = Calendar.getInstance();
myCal.setTimeInMillis(myPrefs.getLong("time", 0));
mgr.set(AlarmManager.RTC_WAKEUP, myCal.getTimeInMillis(), pi);
Log.i(myTag, "alarm set for " + myCal.getTime().toLocaleString());
Toast.makeText(getApplicationContext(),"Alarm set for " + myCal.getTime().toLocaleString(), Toast.LENGTH_LONG).show();
}
在我的onAlarmReciever onRecieve方法中是这样的:
Intent i = new Intent(context, AlarmActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
所以基本上当意图触发它时会启动AlarmActivity。在该活动中,您可以尝试一下您正在做的事情,如果失败,请再次调用setAlarm()
答案 1 :(得分:1)
您有两种选择:服务,或使用AlarmManager设置闹钟。您选择哪一个主要取决于您想要重试的频率。一分钟?使用服务。一小时?一天?设置一个警报,这样你就不会浪费电话资源来保持服务的活跃。
http://developer.android.com/reference/android/app/Service.html
http://developer.android.com/reference/android/app/AlarmManager.html
答案 2 :(得分:0)
撰写Android Service