2013-06-21 19 views
25

Tôi gặp vấn đề, tôi muốn đợi 10 giây vì tôi muốn ứng dụng của tôi bắt đầu mã bên dưới sau 10 giây nhưng không dừng người đó nhấp chuột bất kỳ điều gì khác trong ứng dụng (mà không cần gọi Thread.sleep();).Làm cách nào để chờ 10 giây mà không có giao diện người dùng ứng dụng khóa trong android

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(); 
  } 
+0

postDelayed wont't khóa Ui bạn nhưng Thread.Sleep làm. Hủy bỏ Thread.Sleep và tiếp tục công việc của bạn trong Runnable của bạn –

Trả lời

12

Bạn không bao giờ muốn gọi thread.sleep() trên thread UI như nó có vẻ như bạn đã tìm ra. Điều này đóng băng các UI và luôn luôn là một điều xấu để làm. Bạn có thể sử dụng một riêng biệt ThreadpostDelayed

This SO answer cho thấy làm thế nào để làm điều đó cũng như một số tùy chọn khác

Handler

TimerTask

Bạn có thể nhìn vào những điều này và xem cái nào sẽ làm việc tốt nhất cho tình huống cụ thể của bạn

0

làm điều này trên một chủ đề mới (tách nó từ chủ đề chính)

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

handler 1with:

handler.sendEmptyMessageDelayed(1, 10000); 
} 

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

"TRIGGER" là gì vì tài liệu android yêu cầu một int không thể đặt chuỗi – DarkVision

+0

Tôi đã sai ... đây là id của thư của bạn. Hãy thử với 1 –

118

Bạn có thể sử dụng này:

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

Dễ dàng và hoạt động mà không cần thêm bất kỳ nỗ lực nào. Tôi cần một cái gì đó concize và nó làm việc như một say mê – user3833732

Các vấn đề liên quan