首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用GcmTaskService在特定时间发出通知

使用GcmTaskService在特定时间发出通知
EN

Stack Overflow用户
提问于 2015-08-01 05:52:13
回答 1查看 205关注 0票数 1

我需要帮助在一天中的特定时间运行通知。我已经搜查过了,但什么也没找到。

我使用GCMTaskService,我有一个PeriodicTask,它现在每24小时运行一次任务。我要它每天下午4点运行。你知道我能做什么吗?

以下是截至目前的定期任务:

代码语言:javascript
复制
    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课程:

代码语言:javascript
复制
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;
   }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-04 00:49:17

之所以很难做到这一点,是因为API是故意的,而不是为它设计的。就服务器负载而言,每天在同一时间访问服务器并不是一个好主意。

例如,如果您的应用程序有1000 ppl,每天向服务器签入1倍,则QPS将为1000/(24 * 60 * 60) = 0.011。

如果你想让每个人下午3点点击服务器,你的QPS将是1000。随着安装基础的增加,情况会变得更糟。

如果你主持你自己的服务器,你将不得不分拆额外的能力来处理这个巨大的激增,如果你租用服务器,你将被收取大量的分拆实例来处理说。

如果你只是为了一个测试应用程序或者用户基数很小的东西而这么做,这仍然不是一个好主意,因为你不知道你将来会有多少用户。但是,您始终可以计算秒的#,直到您想要的挂钟时间为止,并使用它来调度任务。

使用可能是最简单的方法。释义:

代码语言:javascript
复制
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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31758745

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档