私はRecyclerViewを非表示にし、ProgressBarを表示するためのアンドロイドアプリケーションのメソッドを作成しています。私はその後、元の可視状態に2つのビューをリセットする前に、いくつかのロジックを実行します。実行順序がThread.sleepの使用と混ざり合っています
setVisibility()
コールだけで、意図したとおりに動作します。しかし、論理を実行した直後には、待機するようにThread.sleep()
に電話する必要があります。
最初は、setVisibility()
を呼び出すときに問題がありました。それは単に何もしなかった。私は同様の問題で多くの質問を見つけましたが、似ていません。私は自分の問題に固有の解決策を見つけることができませんでした。
単にsetVisibility()
を呼び出す新しいメソッドを作成すると、これは意図した通りに機能することがわかりました。私は論理が動くのを止めるまで、一行ずつ動かし始めました。
それでも、は技術的にはが正しく表示されます。しかし、setVisibility()
コールからいくつかの回線がダウンしているにもかかわらず、私のThread.sleep()
は、setVisibility()
より前に実行するように強制されているようです。私はこれが私の元々の問題だと信じています。論理的には、Thread.sleep()
の後のコマンドは直後に実行され、effectivleyは次のフレームでsetVisibility()
を元に戻します。
これは私の方法である:
public void SetMainInvisible(){
mRecyclerView.setVisibility(View.INVISIBLE);
mMainProgressBar.setVisibility(View.VISIBLE);
mTrainAdapter.RefreshAll();
Log.d("TEST", "FINISHED VIS");
try {
Thread.sleep(sSleepTime);
} catch (InterruptedException exception) {
// In the nature of a simple "Thread.sleep", there is no real reason to respond
// directly to interruption. If the sleep request is interrupted, the best course
// of action to preserve user experience is to simply move on. That said, we will
// still "re-enable" the flag that tells us the thread was interrupted, in case we
// should need to clarify if there was an interruption, later on. As is, this flag
// will be reset to false as soon as the exception is thrown.
Thread.currentThread().interrupt();
}
}
私の直接観察から、それが呼び出したときに、私のログのプリントは "VISを終えました"。その後、私のアプリケーションはThread.sleep()
ステージに入り、3秒間待機します。私の見解は、最初の行の指示に従って、可視性を変更します()。私はsetVisibility()
私のコードのどこにも持っていない。
私はThread.sleepについてさらに読んでみましたが、すべての参考文献は私が教えていることを正確に示唆しています。実行すると、プロセスは設定された時間スリープ状態になります。メソッドが強制的に他のすべてのロジックを延期してから返されるようにするべきではありません。逆に、the examples at Tutorial Pointは、通常の動作を示唆するロジックと出力を提供します。
私は本当にThread.sleep()
と呼ぶべきではないことを知っていますが、これは私が大学で練習している練習の直接要件です。 Thread.sleep()
は、エンドの方法にもかかわらず、他のコマンドの前に実行されるのはなぜですか?