Android は基本的に、UI スレッドとバックグラウンド スレッドという 2 つのスレッド タイプで動作します。アンドロイドのドキュメントによると -
この問題を解決するために、UI スレッドの外部から Android UI ツールキットにアクセスしないでください。Android には、他のスレッドから UI スレッドにアクセスする方法がいくつか用意されています。役立つメソッドのリストを次に示します。
Activity.runOnUiThread(Runnable)  
View.post(Runnable)  
View.postDelayed(Runnable, long)
現在、この問題を解決するためのさまざまな方法があります。コードサンプルで説明します
runOnUiThread
new Thread()
{
    public void run()
    {
        myactivity.this.runOnUiThread(new runnable()
        {
            public void run()
            {
                //Do your UI operations like dialog opening or Toast here
            }
        });
    }
}.start();
ルーパー
スレッドのメッセージ ループを実行するために使用されるクラス。デフォルトでは、スレッドにはメッセージ ループが関連付けられていません。これを作成するには、ループを実行するスレッドで prepare() を呼び出し、次に loop() を呼び出して、ループが停止するまでメッセージを処理させます。
class LooperThread extends Thread {
    public Handler mHandler;
    public void run() {
        Looper.prepare();
        mHandler = new Handler() {
            public void handleMessage(Message msg) {
                // process incoming messages here
            }
        };
        Looper.loop();
    }
非同期タスク
AsyncTask を使用すると、ユーザー インターフェイスで非同期作業を実行できます。ワーカー スレッドでブロッキング操作を実行し、UI スレッドで結果を発行します。スレッドやハンドラーを自分で処理する必要はありません。
public void onClick(View v) {
    new CustomTask().execute((Void[])null);
}
private class CustomTask extends AsyncTask<Void, Void, Void> {
    protected Void doInBackground(Void... param) {
        //Do some work
        return null;
    }
    protected void onPostExecute(Void param) {
        //Print Toast or open dialog
    }
}
ハンドラ
Handler を使用すると、スレッドの MessageQueue に関連付けられた Message および Runnable オブジェクトを送信および処理できます。
Message msg = new Message();
    new Thread()
    {
        public void run()
        {
            msg.arg1=1;
            handler.sendMessage(msg);
        }
    }.start();
    Handler handler = new Handler(new Handler.Callback() {
        @Override
        public boolean handleMessage(Message msg) {
            if(msg.arg1==1)
            {
                //Print Toast or open dialog        
            }
            return false;
        }
    });