2012-11-15 45 views
0

我在啓動ScheduledThreadPoolExecutor時收到以下異常。我用它來每隔一分鐘輪詢一次服務器。ScheduledThreadPoolExcecutor中的RejectedExecutionException異常

01-11 18:45:50.243: E/AndroidRuntime(2427): Caused by: java.util.concurrent.RejectedExecutionException: pool=0/2147483647, queue=0 

我的代碼

stpe.scheduleWithFixedDelay(new Runnable() { 
     public void run() { 

      //Start Polling: 
      Calendar cal = Calendar.getInstance(); 
      cal.getTime(); 
      SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss"); 
      System.out.println(sdf.format(cal.getTime())); 
      Log.d("Polling", sdf.format(cal.getTime()) + " Polling for devices"); 

      HttpUtil httpUtil = new HttpUtil(mContext); 
      httpUtil.setJNAPCode(R.string.action_devices); 
      httpUtil.executeJNAPAction(true); 


     } 
    },0, 60,TimeUnit.SECONDS);   

在創建活動時,這就是所謂的。每次我開始活動時,我都會收到此例外情況,即它在崩潰後下次加載時有效。

我在關閉活動之前使用stpe.shutdownNow()將其關閉。但是,當下次在加載應用程序之後創建此活動時,我會得到異常。

回答

0

執行程序關閉後,您無法提交新任務。您可以保存scheduleAtFixedRate方法返回的未來並在離開活動之前取消它,同時保持執行程序正在運行。活動恢復時重新安排任務。

或者:在離開活動時關閉執行程序,當活動恢復時創建一個新的程序。

+0

關閉stpe後,我不會創建新任務。它僅在關閉應用程序時關閉。但是,當下次應用程序加載時,我嘗試提交我得到這個。 –

+0

我不是Android專家,但我認爲您的應用在您離開並回來後會保持其狀態。因此,除非您在onStart中創建執行程序的新實例,否則您將使用先前關閉的實例。 – assylias

+0

所以你會在onCreate中創建執行程序,在onStart中提交任務,在onStop中取消它並關閉onDestroy中的執行程序。 – assylias