Android Toast Thread safe way of displaying Toast (Application Wide)

Help us to keep this website almost Ad Free! It takes only 10 seconds of your time:
> Step 1: Go view our video on YouTube: EF Core Bulk Insert
> Step 2: And Like the video. BONUS: You can also share it!


public class MainApplication extends Application {
    private static Context context; //application context

    private Handler mainThreadHandler;
    private Toast toast;

    public Handler getMainThreadHandler() {
        if (mainThreadHandler == null) {
            mainThreadHandler = new Handler(Looper.getMainLooper());
        return mainThreadHandler;

    @Override public void onCreate() {
        context = this;
    public static MainApplication getApp(){
        return (MainApplication) context;

     * Thread safe way of displaying toast.
     * @param message
     * @param duration
    public void showToast(final String message, final int duration) {
        getMainThreadHandler().post(new Runnable() {
            public void run() {
                if (!TextUtils.isEmpty(message)) {
                    if (toast != null) {
                        toast.cancel(); //dismiss current toast if visible
                    } else {
                        toast = Toast.makeText(App.this, message, duration);

Remember to add MainApplication in manifest.

Now call it from any thread to display a toast message.

MainApplication.getApp().showToast("Some message", Toast.LENGTH_LONG);

Got any Android Question?