ExecutorService can not reuse its thread










0















I have the following task:



void task()

Looper.preapre();
handler = new Handler();
runnable = new Runnable()

if(notDone)

doSth();
handler.postDelay(runnable,timeInterval);

else

handler.removeCallBacks(runnable);
returnResult(); / the task is done and return some results


handler.post(runnable);
Looper.loop();



I use ExecutorService with single worker thread to run this task, the 1st time it runs just fine but the 2nd time the task is never be executed because the worker thread is still running the 1st task although i call removeCallBacks. Does anyone know where the problem is? Thanks in advance.



PS: I have try Looper.quit() but it kills the thread so the executor can not run the task on the dead thread.










share|improve this question


























    0















    I have the following task:



    void task()

    Looper.preapre();
    handler = new Handler();
    runnable = new Runnable()

    if(notDone)

    doSth();
    handler.postDelay(runnable,timeInterval);

    else

    handler.removeCallBacks(runnable);
    returnResult(); / the task is done and return some results


    handler.post(runnable);
    Looper.loop();



    I use ExecutorService with single worker thread to run this task, the 1st time it runs just fine but the 2nd time the task is never be executed because the worker thread is still running the 1st task although i call removeCallBacks. Does anyone know where the problem is? Thanks in advance.



    PS: I have try Looper.quit() but it kills the thread so the executor can not run the task on the dead thread.










    share|improve this question
























      0












      0








      0








      I have the following task:



      void task()

      Looper.preapre();
      handler = new Handler();
      runnable = new Runnable()

      if(notDone)

      doSth();
      handler.postDelay(runnable,timeInterval);

      else

      handler.removeCallBacks(runnable);
      returnResult(); / the task is done and return some results


      handler.post(runnable);
      Looper.loop();



      I use ExecutorService with single worker thread to run this task, the 1st time it runs just fine but the 2nd time the task is never be executed because the worker thread is still running the 1st task although i call removeCallBacks. Does anyone know where the problem is? Thanks in advance.



      PS: I have try Looper.quit() but it kills the thread so the executor can not run the task on the dead thread.










      share|improve this question














      I have the following task:



      void task()

      Looper.preapre();
      handler = new Handler();
      runnable = new Runnable()

      if(notDone)

      doSth();
      handler.postDelay(runnable,timeInterval);

      else

      handler.removeCallBacks(runnable);
      returnResult(); / the task is done and return some results


      handler.post(runnable);
      Looper.loop();



      I use ExecutorService with single worker thread to run this task, the 1st time it runs just fine but the 2nd time the task is never be executed because the worker thread is still running the 1st task although i call removeCallBacks. Does anyone know where the problem is? Thanks in advance.



      PS: I have try Looper.quit() but it kills the thread so the executor can not run the task on the dead thread.







      android multithreading






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 2 '18 at 4:09









      Quang NhatQuang Nhat

      238




      238






















          1 Answer
          1






          active

          oldest

          votes


















          1














          After doing a research, i found that when a looper is attached to a thread, it will keep the thread active all the time even the thread is idle, so the ExecutorService can not get back the idle thread






          share|improve this answer






















            Your Answer






            StackExchange.ifUsing("editor", function ()
            StackExchange.using("externalEditor", function ()
            StackExchange.using("snippets", function ()
            StackExchange.snippets.init();
            );
            );
            , "code-snippets");

            StackExchange.ready(function()
            var channelOptions =
            tags: "".split(" "),
            id: "1"
            ;
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function()
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled)
            StackExchange.using("snippets", function()
            createEditor();
            );

            else
            createEditor();

            );

            function createEditor()
            StackExchange.prepareEditor(
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader:
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            ,
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            );



            );













            draft saved

            draft discarded


















            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53112575%2fexecutorservice-can-not-reuse-its-thread%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            1














            After doing a research, i found that when a looper is attached to a thread, it will keep the thread active all the time even the thread is idle, so the ExecutorService can not get back the idle thread






            share|improve this answer



























              1














              After doing a research, i found that when a looper is attached to a thread, it will keep the thread active all the time even the thread is idle, so the ExecutorService can not get back the idle thread






              share|improve this answer

























                1












                1








                1







                After doing a research, i found that when a looper is attached to a thread, it will keep the thread active all the time even the thread is idle, so the ExecutorService can not get back the idle thread






                share|improve this answer













                After doing a research, i found that when a looper is attached to a thread, it will keep the thread active all the time even the thread is idle, so the ExecutorService can not get back the idle thread







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Nov 14 '18 at 3:03









                Quang NhatQuang Nhat

                238




                238



























                    draft saved

                    draft discarded
















































                    Thanks for contributing an answer to Stack Overflow!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid


                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.

                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function ()
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53112575%2fexecutorservice-can-not-reuse-its-thread%23new-answer', 'question_page');

                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    這個網誌中的熱門文章

                    How to read a connectionString WITH PROVIDER in .NET Core?

                    In R, how to develop a multiplot heatmap.2 figure showing key labels successfully

                    Museum of Modern and Contemporary Art of Trento and Rovereto