我需要帮助在一天中的特定时间运行通知。我已经搜查过了,但什么也没找到。
我使用GCMTaskService,我有一个PeriodicTask,它现在每24小时运行一次任务。我要它每天下午4点运行。你知道我能做什么吗?
以下是截至目前的定期任务:
long periodSecs = 86400L;
long flexSecs = 15L;
String tag = "periodic | " + taskID++ + ": " + periodSecs + "s, f:" + flexSecs; // a unique task identifier
periodic = new PeriodicTask.Builder()
.setService(MyTasksService.class)
.setPeriod(periodSecs)
.setFlex(flexSecs)
.setTag(tag)
.setPersisted(true)
.setRequiredNetwork(Task.NETWORK_STATE_CONNECTED)
.setRequiresCharging(false)
.build();
GcmNetworkManager.getInstance(this).schedule(periodic);这是我的GCMTaskService课程:
public class MyTasksService extends GcmTaskService {
public MyTasksService() {
super();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return super.onStartCommand(intent, flags, startId);
}
@Override
public IBinder onBind(Intent intent) {
Log.i("myTaskService", "onBind");
return super.onBind(intent);
}
@Override
public void onInitializeTasks() {
super.onInitializeTasks();
Log.i("myTaskService", "onInitializeTasks");
}
@Override
public int onRunTask(TaskParams taskParams) {
Log.i("myTaskService", "onRunTask");
SendPushNotification.dailyNewsPush();
SendPushNotification.dailyLecturasPush();
return 0;
}
}发布于 2015-08-04 00:49:17
之所以很难做到这一点,是因为API是故意的,而不是为它设计的。就服务器负载而言,每天在同一时间访问服务器并不是一个好主意。
例如,如果您的应用程序有1000 ppl,每天向服务器签入1倍,则QPS将为1000/(24 * 60 * 60) = 0.011。
如果你想让每个人下午3点点击服务器,你的QPS将是1000。随着安装基础的增加,情况会变得更糟。
如果你主持你自己的服务器,你将不得不分拆额外的能力来处理这个巨大的激增,如果你租用服务器,你将被收取大量的分拆实例来处理说。
如果你只是为了一个测试应用程序或者用户基数很小的东西而这么做,这仍然不是一个好主意,因为你不知道你将来会有多少用户。但是,您始终可以计算秒的#,直到您想要的挂钟时间为止,并使用它来调度任务。
使用可能是最简单的方法。释义:
Calendar currentCal = Calendar.getInstance();
Calendar 3amCal = Calendar.getInstance();
3amCal.set(Calendar.HOUR_OF_DAY, 3);
if (3amCal.before(currentCal)) {
// it's past 3 am, roll forward
3amCal.add(Calendar.DATE, 1);
}
final long 3amTomorrow = 3amCal.getTime();
final long current = currentCal.getTime();
final long millisUntil3amTomorrow = 3amTomorrow - currentTime;https://stackoverflow.com/questions/31758745
复制相似问题