簡體   English   中英

哪個實施最佳? 在用戶設置的時間后觸發代碼的兩種方法

[英]Which implementation is best? 2 ways to fire code after a user-set amount of time

場景:

用戶在EditText中輸入45(分鍾),然后按“確定”按鈕。

45分鍾過去之后,我要執行一個代碼塊。

我一直在討論兩種不同的方法來做到這一點- 最好和為什么?


選項#1 -AlarmManager-> PendingIntent-> Intent-> BroadcastListener

    int timeValue = Integer.parseInt(editText_timer_value.getText().toString());

    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);

    Intent intent = new Intent(this, TimerReceiver.class);

    PendingIntent pendingIntent = PendingIntent
            .getBroadcast(this.getApplicationContext(), 234324243, intent, 0);

    alarmManager.set(AlarmManager.RTC_WAKEUP,
            System.currentTimeMillis() + (timeValue * 60000), pendingIntent);

    finish();

    // TimerReceiver.class fires when the time is up, and contains additional Code.


(要么)

選項#2-意向->意向附加->服務-> CountDownTimer

    String timeValue = editText_timer_value.getText().toString();

    Intent intent = new Intent(this, TimerService.class);

    intent.putExtra("TIMER_VALUE", timeValue);

    getApplicationContext().startService(intent);

    finish();

    // TimerService.class starts immediately and runs a CountDownTimer from intent Extras



SO ,哪個實現“更好”或“正確”, 為什么?
謝謝! :)

PS ..任何其他建議也非常歡迎!

警報管理器:此類可提供對系統警報服務的訪問。 這些使您可以計划您的應用程序在將來的某個時間運行。 警報響起時,系統會廣播已為其注冊的Intent,並在目標應用程序尚未運行時自動啟動它。 設備處於睡眠狀態時會保留已注冊的警報(如果警報在這段時間內關閉,可以選擇將其喚醒),但是如果將其關閉並重新啟動,則將被清除。

只要警報接收器的onReceive()方法正在執行,警報管理器就會保持CPU喚醒鎖。 這樣可以確保手機在完成廣播處理之前不會進入睡眠狀態。

注意:警報管理器適用於希望在特定時間運行應用程序代碼的情況,即使您的應用程序當前未運行。 對於正常的計時操作(滴答聲,超時等),使用Handler會更容易且效率更高。

https://developer.android.com/reference/android/app/AlarmManager.html上了解更多

服務:服務只是一個組件,即使用戶不與您的應用程序交互,它也可以在后台運行。 因此,僅在需要時才應創建服務。

如果您需要在主線程之外執行工作,而只是在用戶與您的應用程序交互時執行工作,那么您可能應該改為創建一個新線程而不是服務。 例如,如果您想播放一些音樂,但是只有在您的活動正在運行時,才可以在onCreate()中創建一個線程,在onStart()中開始運行它,然后在onStop()中停止它。 還可以考慮使用AsyncTask或HandlerThread,而不是傳統的Thread類。 有關線程的更多信息,請參見“進程和線程”文檔。

通過https://developer.android.com/guide/components/services.html了解有關服務的信息

根據文檔,Android表示,您應該使用服務來執行長期運行的繁重任務。 由於您只想在某個時間段內使用計時器,因此為此使用服務完全是胡說八道,浪費資源。

所以我建議您使用AlaramManager,就像android在文檔中說的那樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM