Why use Handler?

后端 未结 4 1924
傲寒
傲寒 2021-02-01 10:25

I came across this code in a very basic Handler tutorial. The code is working fine but I do not understand why I have to use Handler for progressDialog.dismiss()

4条回答
  •  天命终不由人
    2021-02-01 11:04

    Why to use Handler in Android?


    First: Let us know what is thread:

    • Threads help in multi-tasking
    • Threads can be taught as a mini process running under a main process
    • Threads enable at-least the appearance parallel execution

    Second: Let us know about the application thread:-

    • When the android application is first started the runtime system will create a single main thread, this main thread will take care of execution of all the components in android

    Android UI-Toolkit is not thread safe

    • As stated there are many components in the android main thread, now suppose one of the components takes a long time for execution then this makes the main thread unresponsive and it will show the application unresponsive
    • Sub-threads cannot directly manipulate the application (main) thread in the android
    • Handler acts as a interface and collects the messages from the sub-threads and update the main application thread one by one as the messages arrive, Thread handlers are implemented in main thread.

    Handler class:

    • For the purpose of multithreading we shall use handler class which comes from the package android.os.Handler
    • Each thread is handled by one instance of handler class

    Figure

    • From the above figure we can see that Each thread is handled by one instance of the Handler class
    • threads communicate between each other with the help of messages
    • This handler class helps to maintain kind of sync-coordination b/w threads by allowing them to run together achieving multithreading

    Instance of handler is made

    Handler handlerObject = new Handler();
    

    Final piece on using handler is to use Runnable Interface:

    • handler class utilizes runnable interface to implement multithreading
    • We override run method to execute a thread a specified number of time

    Class NameOfClass implements Runnable
    {
        Public void run()
        {
            //Body of run method
        }
    }
    

    Putting all together

    //Create handler in the thread it should be associated with 
    //in this case the UI thread
    final Handler handler = new Handler();
    Runnable runnable = new Runnable() {
        public void run() {
            while(running){
                //Do time consuming stuff
    
                //The handler schedules the new runnable on the UI thread
                handler.post(new Runnable() {
                    //Ex.. using progressbar to set the pogress
                                //Updating the UI is done inside the Handler
                });
            }
        }
    };
    new Thread(runnable).start();
    

提交回复
热议问题