Как я могу ждать 10 секунд без блокировки пользовательского интерфейса приложения в android

Я столкнулся с проблемой, я хочу подождать 10 секунд, потому что я хочу, чтобы мое приложение запустило код ниже через 10 секунд, но не остановив этого человека от нажатия на что-либо еще в приложении (без вызова 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();
   }

Ответ 1

Вы никогда не хотите вызывать thread.sleep() в потоке UI, поскольку это звучит так, как вы поняли. Это замерзает UI и всегда плохо. Вы можете использовать отдельные Thread и postDelayed

Этот ответ SO показывает, как это сделать, а также несколько других опций

Handler

TimerTask

Вы можете посмотреть на них и посмотреть, что лучше всего подходит для вашей конкретной ситуации.

Ответ 2

Вы можете использовать это:

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

Ответ 4

1 с обработчиком:

handler.sendEmptyMessageDelayed(1, 10000);
}

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

Ответ 5

сделайте это в новом потоке (отделите его от основного потока)

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