2014-12-13 139 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