第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在Android中調(diào)度循環(huán)任務(wù)

在Android中調(diào)度循環(huán)任務(wù)

慕運維8079593 2019-07-09 10:12:05
在Android中調(diào)度循環(huán)任務(wù)我正在設(shè)計一個應(yīng)用程序,它有一個經(jīng)常性的任務(wù),即只要應(yīng)用程序處于前臺,就會將其發(fā)送到專用服務(wù)器。在我的網(wǎng)上搜索中,我看到了幾種不同的方法,并且想知道什么是最好的方法。調(diào)度服務(wù)器調(diào)用的最佳方法是什么?我看到的選擇是:定時器.ScheduledThreadPoolExecutor.服務(wù).廣播電臺AlarmManager.你的意見呢?編輯: 我之所以需要這個,是因為一個基于聊天的應(yīng)用程序,它將所有的用戶操作發(fā)送到遠(yuǎn)程服務(wù)器。即用戶正在輸入消息,用戶正在讀取消息,用戶處于聯(lián)機(jī)狀態(tài),用戶處于脫機(jī)狀態(tài)等。這意味著每隔一段時間,我就需要發(fā)送服務(wù)器我正在做的事情,因為我和其他人打開了一個聊天室,他們需要知道我在做什么。類似于WhatsApp消息反饋機(jī)制:編輯2: 現(xiàn)在,應(yīng)該幾乎總是通過JobSchedulerAPI(或FirebaseJobDispatcher),以防止電池耗盡問題,如生命體征部分安卓訓(xùn)練
查看完整描述

3 回答

?
幕布斯6054654

TA貢獻(xiàn)1876條經(jīng)驗 獲得超7個贊

我不確定,但據(jù)我所知,我同意我的看法。如果我錯了,我總是接受最好的答案。

報警經(jīng)理

警報管理器保持CPU喚醒鎖,只要警報接收器的鎖onReceive()方法正在執(zhí)行。這保證了在你處理完廣播后手機(jī)不會睡覺。一次onReceive()返回時,警報管理器將釋放此喚醒鎖。這意味著,在某些情況下,電話會在您的onReceive()方法完成。如果你的報警器呼叫Context.startService(),在所請求的服務(wù)啟動之前,手機(jī)可能會休眠。為了防止這件事,你的BroadcastReceiverService將需要實現(xiàn)單獨的喚醒鎖定策略,以確保電話繼續(xù)運行直到服務(wù)可用為止。

注意:警報管理器適用于您希望在特定時間運行應(yīng)用程序代碼的情況,即使您的應(yīng)用程序當(dāng)前沒有運行。對于正常的定時操作(滴答、超時等),使用Handler更容易,效率更高。

定時器

timer = new Timer();

    timer.scheduleAtFixedRate(new TimerTask() {

        synchronized public void run() {

            \\ here your todo;
            }

        }}, TimeUnit.MINUTES.toMillis(1), TimeUnit.MINUTES.toMillis(1));

Timer有一些缺點可以通過ScheduledThreadPoolExecutor..所以這不是最好的選擇

ScheduledThreadPoolExecutor.

你可以用java.util.TimerScheduledThreadPoolExecutor(首選)在后臺線程上定期安排動作。

下面是一個使用后者的示例:

ScheduledExecutorService scheduler =
    Executors.newSingleThreadScheduledExecutor();scheduler.scheduleAtFixedRate      (new Runnable() {
         public void run() {
            // call service
         }
      }, 0, 10, TimeUnit.MINUTES);

所以我更喜歡ScheduledExecutorService

但是也要考慮到,如果在應(yīng)用程序運行時將發(fā)生更新,則可以使用Timer,如其他答案或較新的答案所示ScheduledThreadPoolExecutor..如果應(yīng)用程序在未運行時仍將進(jìn)行更新,則應(yīng)使用AlarmManager.

警報管理器適用于您希望在特定時間運行應(yīng)用程序代碼的情況,即使您的應(yīng)用程序當(dāng)前沒有運行。

請注意,如果您計劃在關(guān)閉應(yīng)用程序時進(jìn)行更新,則每十分鐘更新一次是非常頻繁的,因此可能會太耗電。


查看完整回答
反對 回復(fù) 2019-07-09
?
慕姐8265434

TA貢獻(xiàn)1813條經(jīng)驗 獲得超2個贊

定時器

正如在javadocs最好使用ScheduledThreadPoolExecutor。

ScheduledThreadPoolExecutor

當(dāng)用例需要多個工作線程且睡眠間隔較小時,請使用此類。有多?。苦?,我想大概15分鐘。這個AlarmManager此時啟動調(diào)度間隔,這似乎表明,對于較小的睡眠間隔,可以使用該類。我沒有數(shù)據(jù)支持最后一項聲明。這是一種預(yù)感。

服務(wù)

VM可以隨時關(guān)閉您的服務(wù)。不要將服務(wù)用于經(jīng)常性任務(wù)。循環(huán)任務(wù)可以啟動一項服務(wù),這完全是另一回事。

AlarmManager的BroadCastReciever

對于更長的睡眠間隔(>15分鐘),這是方法。AlarmManager已經(jīng)有常量(AlarmManager.INTERVAL_DAY)暗示它可以在最初計劃的幾天后觸發(fā)任務(wù)。它還可以喚醒CPU來運行代碼。

您應(yīng)該根據(jù)您的計時和工作線程需要使用這些解決方案之一。


查看完整回答
反對 回復(fù) 2019-07-09
  • 3 回答
  • 0 關(guān)注
  • 545 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號