私は問題に悩まされています.10秒待ってほしいのは、10秒後にアプリケーションが以下のコードを開始したいのですが、その人がアプリケーション内の他のものをクリックするのを止めないためです(without calling Thread.sleep();
)。
try {
Log.v("msg", "WAIT CheckFrequencyRun");
Thread.sleep(10000); // giving time to connect to wifi
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//if no network
if(wifiManager.getConnectionInfo().getNetworkId()==-1){
//stop wifi
wifiManager.setWifiEnabled(false);
Log.v("msg", "no connection");
handler.postDelayed(this, checkInterval);
}
//else connection
else{
Log.v("msg", "connection");
onDestroy();
}
UI
スレッドでthread.sleep()
を呼び出したくはないようです。これはUI
をフリーズし、常に悪いことです。個別のThread
とpostDelayed
を使用できます
このSO answer は、その方法と他のいくつかのオプションを示しています
これらを見て、特定の状況に最適なものを確認できます
これを使用できます:
_Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
// Actions to do after 10 seconds
}
}, 10000);
_
ハンドラーを停止するには、次を試してください:handler.removeCallbacksAndMessages(null);
1withハンドラー:
handler.sendEmptyMessageDelayed(1, 10000);
}
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what == 1) {
//your code
}
}
};
これを新しいスレッドで実行します(メインスレッドから分離します)
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
}
}).run();