例: ボタンを取得しました。ボタンを押すと、API から画面にデータをフェッチする関数が呼び出されます。しかし、ユーザーがもう一度押しても関数がまだ実行中(処理中)の場合、関数の呼び出しを停止するにはどうすればよいですか。
ボタンを非表示にする代わりに、それを処理する方法はありますか? それを処理するためにスレッドを使用する必要がありますか? スレッドが生きているかどうかを確認するには?私はそれをよく知りません。対処方法の提案と例を教えてください。
私の悪い英語でごめんなさい。ありがとう。
呼び出している関数が同期されている場合、問題はないはずです。関数がスレッドを開始する場合、次のようにすることができます。
Thread mThrd = null;
public void func() {
if(mThrd!=null && mThrd.isRunning()) {
return;
}
mThrd = new Thread(/*the runnable that do the job*/);
mThrd.start();
}
関数が「バックグラウンドで何かを実行する」だけのフレームワーク API である場合、それが実行されたかどうかを通知するメソッドがあったり、何らかのメソッドで結果を確認したりすることができます。お気に入り:
public void func() {
if(checkDone()) {
return;
}
callFrameworkAPI();
}
ボタンを押すboolean
と回転するを作ります。true
true の場合、メソッドの通常の機能を実行します。boolean
次に、その人がボタンをもう一度押したときにそうしますfalse
。false の場合は、やりたいことを実行するかbreak
、何もしないようにしますreturn
。
関数を呼び出すときに、次の行を関数に追加します。これにより、ボタンが一度クリックされるとクリックできなくなります。
Button b1 = findViewById(R.id.button_name);
b1.setClickable(false);
APIフェッチが完了したら、おそらくあなたのケースでは関数の最後に、次の行を追加して、ボタンを再びクリックできるようにします。
b1.setClickable(true);