web-dev-qa-db-ja.com

androidでアプリケーションUIをロックせずに10秒間待機する方法

私は問題に悩まされています.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();
   }
36
DarkVision

UIスレッドでthread.sleep()を呼び出したくはないようです。これはUIをフリーズし、常に悪いことです。個別のThreadpostDelayedを使用できます

このSO answer は、その方法と他のいくつかのオプションを示しています

ハンドラー

TimerTask

これらを見て、特定の状況に最適なものを確認できます

15
codeMagic

これを使用できます:

_Handler handler = new Handler();
handler.postDelayed(new Runnable() {
    public void run() {
     // Actions to do after 10 seconds
    }
}, 10000);
_

ハンドラーを停止するには、次を試してください:handler.removeCallbacksAndMessages(null);

150
Dullahan

1withハンドラー:

handler.sendEmptyMessageDelayed(1, 10000);
}

private Handler handler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        if (msg.what == 1) {
           //your code
        }
    }
};
2
Anton Bevza

これを新しいスレッドで実行します(メインスレッドから分離します)

 new Thread(new Runnable() {
     @Override
     public void run() {
        // TODO Auto-generated method stub
     }
}).run();
2
Marcis