我怎么能在android中等待10秒而不锁定应用程序UI ?



我遇到了一个问题,我想等待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();
   }

你可以这样做:

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

对于停止处理程序,你可以尝试这样做:handler.removeCallbacksAndMessages(null);

您永远不想在UI线程上调用thread.sleep(),因为听起来您已经弄清楚了。这会冻结UI,这总是一件不好的事情。您可以使用单独的ThreadpostDelayed

这个SO答案展示了如何做到这一点以及其他几个选项

处理程序

TimerTask

你可以看看这些,看看哪一个最适合你的特殊情况

1with handler:

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();

最新更新