We cant touch background thread to main thread directly so handler is going to collect all events which are available in main thread in a queue and posses this queue to looper class.
In android Handler is mainly used to update the main thread from background thread or other than main thread. There are two methods are in handler.
Post() − it going to post message from background thread to main thread using looper.
sendmessage() − if you want to organize what you have sent to ui (message from background thread) or ui functions. you should use sendMessage().
This example demonstrate about how to handler in Progress Dialog.
Step 1 − Create a new project in Android Studio, go to File ⇒ New Project and fill all required details to create a new project.
Step 2 − Add the following code to res/layout/activity_main.xml.
<?xml version = "1.0" encoding = "utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android = "https://schemas.android.com/apk/res/android" xmlns:app = "https://schemas.android.com/apk/res-auto" xmlns:tools = "https://schemas.android.com/tools" android:layout_width = "match_parent" android:layout_height = "match_parent" tools:context = ".MainActivity"> <Button android:id = "@+id/button" android:layout_width = "wrap_content" android:layout_height = "wrap_content" android:text = "Click" app:layout_constraintBottom_toBottomOf = "parent" app:layout_constraintLeft_toLeftOf = "parent" app:layout_constraintRight_toRightOf = "parent" app:layout_constraintTop_toTopOf = "parent" /> </android.support.constraint.ConstraintLayout>
Step 3 − Add the following code to src/MainActivity.java
import android.app.ProgressDialog; import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.support.annotation.RequiresApi; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; import android.widget.ProgressBar; public class MainActivity extends AppCompatActivity implements View.OnClickListener { Handler mHandler; ProgressDialog mProgressBar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button button = findViewById(R.id.button); button.setOnClickListener(this); } @RequiresApi(api = Build.VERSION_CODES.O) @Override public void onClick(View v) { switch (v.getId()) { case R.id.button: notificationDialog(); break; } } @RequiresApi(api = Build.VERSION_CODES.O) private void notificationDialog() { mHandler=new Handler(); mProgressBar= new ProgressDialog(MainActivity.this); mProgressBar.setMax(100); mProgressBar.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); mProgressBar.show(); new Thread(new Runnable() { @Override public void run() { for (int i = 0; i <= 100; i++) { final int currentProgressCount = i; try { Thread.sleep(50); } catch (InterruptedException e) { e.printStackTrace(); } //Update the value background thread to UI thread mHandler.post(new Runnable() { @Override public void run() { mProgressBar.setProgress(currentProgressCount); } }); } } }).start(); } }
Let's try to run your application. I assume you have connected your actual Android Mobile device with your computer. To run the app from android studio, open one of your project's activity files and click Run Eclipse Run Icon icon from the toolbar. Select your mobile device as an option and then check your mobile device which will display your default screen.
when user click on the above button it will show progress dialog as shown below.