2014-12-13 180 views
1

我需要在用户在2分钟或2分钟后访问特定屏幕时显示广告,然后在6分钟后再次访问10,14,16 ..在x分钟再做一次事情,然后每隔n分钟做一次

我有下面的代码,它工作正常,如果用户在几分钟2,6,10,14等访问屏幕,但它不起作用,如果用户错过了这些纪要。例如,如果广告在第2分钟显示,但用户直到第8分钟才回来,则会丢失第6分钟的广告。

我该如何应对这一点,以便我能够满足这一点,如果用户在这些分钟以外回来,他们的广告仍然会显示出来?

long start = adStartTime; 
long now = new Date().getTime(); 
int minsElapsedSinceLastAd = (int) ((now - start)/1000/60); 
showAd = previousRunMin !=minsElapsedSinceLastAd&& minsElapsedSinceLastAd % 4 == 2; 
if (showAd) { 
    showAd(); 
    ... 
    previousRunMin = minsElapsedSinceLastAd; 

} 

previousRunMin会有如此,如果用户回来在同一分钟,广告没有显示

+0

例如存储最近的广告时间(例如2分钟)。然后检查用户错过了什么。 – zapl 2014-12-13 02:16:49

+0

我会实现一个fifo堆栈(先入先出)。所以无论何时出现广告时,都要将其放在堆叠上。并且每当用户访问该网站时,应该或应该已经显示的下一个广告将出现... – Ubica 2014-12-13 02:38:05

回答

0

我不知道你的段之前的代码是什么?我会假设它在某种循环中。

无论哪种方式,你都可以做最简单的方法,你知道如何。如果showAd为true,则将全局布尔值设置为true。然后根据添加显示新的布尔值。还有一个主要问题是没有检查,看看用户是否真的看到了广告...

如果有一个检查,看看广告是否被看到,会更容易。如果你没有支票,那很难知道。

1

考虑使用带有scheduleAtFixedRate的ScheduledThreadPoolExecutor:此处描述的调用:ScheduledExecutorService#scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)按照您的要求进行调度,在具有指定延迟和句点的单独线程中调度活动。也许我可以对你的应用程序更加具体,但是你的问题中包含的代码片段没有给出足够的上下文来理解被调度的活动是如何工作的。

+1

为什么选择倒票?这个答案是正确的。 [ScheduledExecutorService](https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ScheduledExecutorService.html)完全按照问题询问的方式执行:首先是初始延迟,然后重复。 – 2014-12-13 09:34:09

+0

我同意,这是一个很好的答案。给予好评。 – Sid 2014-12-14 05:59:25

相关问题