【问题标题】:How to prevent multiple ScheduledExecutorServices from being created upon reopening activity如何防止在重新打开活动时创建多个 ScheduledExecutorService
【发布时间】:2015-07-27 03:24:16
【问题描述】:

我的问题是,在我的项目中打开某个活动时,我初始化了一个 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);
    }

【问题讨论】:

    标签: java android android-intent scheduledexecutorservice


    【解决方案1】:

    我建议不要在您的 Activity 中这样做,因为它旨在显示 UI。改为在Service 中执行此操作。您可以在onStart 中启动Service 并在您的Service 中跟踪执行程序的状态,无论它是否启动。 Service 很好,因为它是一个与 UI 完全无关的背景组件。在屏幕旋转等过程中不会受到影响。

    【讨论】:

      【解决方案2】:

      您应该在关闭活动后取消之前的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()
      

      【讨论】:

        猜你喜欢
        • 2020-12-31
        • 1970-01-01
        • 2013-03-09
        • 2012-05-16
        • 1970-01-01
        • 2017-12-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多