質問編集履歴
1
追記
    
        title	
    CHANGED
    
    | 
         
            File without changes
         
     | 
    
        body	
    CHANGED
    
    | 
         @@ -5,3 +5,48 @@ 
     | 
|
| 
       5 
5 
     | 
    
         | 
| 
       6 
6 
     | 
    
         
             
            Executorの処理が完了していない状態で、再度同じExecutorが呼ばれると処理が溜まっていくのでしょうか。
         
     | 
| 
       7 
7 
     | 
    
         
             
            ご教授いただければ幸いです。
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
            ”追記”
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            大まかな流れとしては以下の通りです。
         
     | 
| 
      
 13 
     | 
    
         
            +
            メインスレッド上ではUI更新の他にも処理を行っているので、一連の流れをすべてメインスレッド上で行うとそちらに支障が出てきます。
         
     | 
| 
      
 14 
     | 
    
         
            +
            なので、比較的重い計算処理を2つに分割し、計算が完了次第メインスレッドで受け取るという形にしたいです。
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
            以下の構成だと、メインスレッドは良好ですが、Executor上では過去の処理命令が蓄積されていき、時間が経つにつれて遅延が発生する状態になっています。
         
     | 
| 
      
 17 
     | 
    
         
            +
            理想としては、Executor1, Executor2のそれぞれにおいて、呼び出し時に空き状態であれば最新のセンサーの値を受け取り計算を実行、実行状態であれば命令を無視できるようにしたいです。(Executor1とExecutor2の計算内容は別物です)
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
            理解が浅いので初歩的な間違いがあれば申し訳ないです。
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
            ```ここに言語を入力
         
     | 
| 
      
 22 
     | 
    
         
            +
            private var sensor1: Float = null  ・・・センサー1の値を格納
         
     | 
| 
      
 23 
     | 
    
         
            +
            private var sensor2: Float = null ・・・センサー2の値を格納
         
     | 
| 
      
 24 
     | 
    
         
            +
            private var result1 : Int = null  ・・・計算処理1の結果を格納
         
     | 
| 
      
 25 
     | 
    
         
            +
            private var result2 : Int = null  ・・・計算処理2の結果を格納
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
            override fun onInitialized(){
         
     | 
| 
      
 28 
     | 
    
         
            +
                calcExecutor1 = Executors.newSingleThreadExecutor()
         
     | 
| 
      
 29 
     | 
    
         
            +
                calcExecutor2 = Executors.newSingleThreadExecutor()
         
     | 
| 
      
 30 
     | 
    
         
            +
            }
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
            // ------ここから繰り返し処理--------
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
            ・センサーから値を取得しsensor1,sensor2を更新
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
            ・値を計算処理するためにExecutorに値を渡す
         
     | 
| 
      
 37 
     | 
    
         
            +
            calcExecutor1.execute {
         
     | 
| 
      
 38 
     | 
    
         
            +
                                        result1 = calculate1( sensor1 )・・・calculate1ではこの引数をもとに計算を実行
         
     | 
| 
      
 39 
     | 
    
         
            +
                                         }
         
     | 
| 
      
 40 
     | 
    
         
            +
            calcExecutor2.execute {
         
     | 
| 
      
 41 
     | 
    
         
            +
                                        result2 = calculate2( sensor2 )・・・calculate2ではこの引数をもとに計算を実行 
         
     | 
| 
      
 42 
     | 
    
         
            +
                                 }
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
            ・result1 , result2がnullでなければ値を処理(軽)した後に画面に表示
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
            // -------ここまで繰り返し処理---------
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
            override fun onDestroyView() {
         
     | 
| 
      
 49 
     | 
    
         
            +
                calcExecutor1.shutdown()
         
     | 
| 
      
 50 
     | 
    
         
            +
                calcExecutor2.shutdown()
         
     | 
| 
      
 51 
     | 
    
         
            +
            }
         
     | 
| 
      
 52 
     | 
    
         
            +
            ``` 
         
     |