Is this a prefect way to stop handlerthread?

后端 未结 4 1937
你的背包
你的背包 2020-12-31 08:35

I always create two handler: one is wraping on main thread, another is wraping on a single thread.

Is this a best method to start and stop these in an Activity lifec

相关标签:
4条回答
  • 2020-12-31 09:18

    I have been following this :

    if (safeHandler!= null) {
         final Looper looper = safeHandler.getLooper();
         looper.quitSafely();
         safeHandler = null;
     }
    
    0 讨论(0)
  • 2020-12-31 09:26

    You can use this as a safe way to stop threads:

     if (safeThread!= null) {
         safeThread.quit();
         safeThread = null; // Object is no more required.
     }
    

    You can use safeThread.quitsafely as well.

    0 讨论(0)
  • 2020-12-31 09:29

    If you start the thread like this:

    HandlerThread thread = new HandlerThread("MyHandlerThread");
    thread.start();
    

    The safest way to stop it would be:

    thread.quitSafely();
    

    quitSafely ensures that all pending messages are processed before the thread stops.

    Note: My original answer included an additional call to thread.join, but I found the join call does not release reliably when used after quitSafely.

    0 讨论(0)
  • 2020-12-31 09:30

    I know it's a somewhat old question, but I stumble across it looking for the same answer and further researching I don't believe the current answer applies very well to HandlerThread (although absolutely correct for normal threads)

    HandlerThread have a builtin quit() and quitSafely(API18) methods to stop the thread. https://developer.android.com/reference/android/os/HandlerThread.html#quit()

    the difference between the two is only if the messages in queue will be processed before it stops or not.

    so to answer, it's as simple as:

    safeThread.quit();
    
    0 讨论(0)
提交回复
热议问题