私はバインドされています。私はその値を更新するProgress Dialogをアプリケーションに書いています。私は1つを作る方法についてのチュートリアルを以下だったと私は、このコードになってしまった。今Android - スレッドの実行が完了した時点を確認する
progress = new ProgressDialog(this);
progress.setMessage("Scanning for Devices");
progress.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progress.setIndeterminate(true);
progress.setProgress(0);
progress.show();
final int totalProgressTime = 100;
final Thread t = new Thread() {
@Override
public void run() {
int jumpTime = 0;
BTAdapter.startDiscovery();
while(jumpTime < totalProgressTime) {
try {
sleep(250);
jumpTime += 5;
progress.setProgress(jumpTime);
}
catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
};
t.start();
しかし、進歩は100を打つ、while()
ループもはや実行され、今私はかなりプログラム的かどうかを知ることができません進行が完了したかどうかを確認します。コードでは、進捗状況が100になるまでスレッドが実行されます。postExecute
機能を持つ非同期タスクとは異なり、スレッドには機能を停止させる機能はないようです(オーバーライドまたはリスナー)実行が完了しました。
スレッドがタスクの実行を停止したとき、またはタスクが完了したときに外部関数を呼び出す方法を知っている人はいますか?
while
のループの後で、UIのスレッドを更新するために関数onExecuteAfter
を呼び出しようとしましたが、それは無駄でした。
ご協力いただきありがとうございます。
*スレッドには停止する機能がないようです。*:メソッドの実行が終了すると実行が終了します。 *タスクが完了したときに外部関数を呼び出す*このようなことはありません。あなたはそれを自分で実装する必要があります。 – Blackbelt
ui以外のスレッドからui上のコードを実行する場合は、activity.runOnUiThread()を使用してください – Ramin
Rxjavaがリクエストに当たる可能性があります – Harlan