簡體   English   中英

如何防止在重新打開活動時創建多個ScheduledExecutorServices

[英]How to prevent multiple ScheduledExecutorServices from being created upon reopening activity

我的問題是,在項目中打開某個活動后,我初始化了ScheduledExecutorService,每20秒向IntentService類發送一個Intent。

現在,當我第一次打開包含ScheduledExecutorService的活動時,Intent按計划每20秒觸發一次。

當我退出活動(停留在應用程序中)然后重新進入活動時,就會出現問題。 這導致Intent在20秒的窗口中發送兩次,我認為這與在活動的onResume中創建新的ScheduledExecutorService有關。

如何確保在任何給定時間只有一個ScheduledExecutorService實例?

相關代碼如下:

@Override
    public void onResume() {
        super.onResume();

        ScheduledExecutorService scheduleIntentSender = Executors.newScheduledThreadPool(1);
        scheduleIntentSender.scheduleAtFixedRate(new Runnable() {
            public void run() {
                sendIntent();
            }
        }, 0, 20,TimeUnit.SECONDS);

        mDownloadStateReceiver =
                new DownloadStateReceiver();
        // Registers the DownloadStateReceiver and its intent filters
        LocalBroadcastManager.getInstance(this).registerReceiver(
                mDownloadStateReceiver,
                testIntentFilter);
    }

我建議您在“ Activity不要這樣做,因為它旨在顯示UI。 而是在Service執行此操作。 您可以啟動一個ServiceonStart和跟蹤執行人的狀態,你的Service ,無論是推出與否。 Service很好,因為它是一個后台組件,完全與UI無關。 在屏幕旋轉等過程中不會受到影響。

關閉活動后,您應該取消以前的ScheduledExecutorService

 ScheduledExecutorService scheduleIntentSender = Executors.newScheduledThreadPool(1);
   final ScheduledFuture schedulHandler = scheduleIntentSender.scheduleAtFixedRate(new Runnable() {
        public void run() {
            sendIntent();
        }
    }, 0, 20,TimeUnit.SECONDS);
//Call schedulHandler.cancel(true) to cancel scheduleIntentSender in onDestroy()

暫無
暫無

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

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