2011-02-10 18 views
9

Tôi muốn rằng một hoạt động mới nên bắt đầu với một số chậm trễ khi nhấn nút. Có thể thực hiện điều đó hay không, và làm như thế nào.Làm thế nào để bắt đầu một hoạt động khác với một số độ trễ sau khi nhấn một nút trong Android?

+0

tâm nếu tôi hỏi tại sao bạn cảm thấy bạn cần sự chậm trễ? Tôi nhận thấy điều này được viết trong một dự án cũ cho công việc, tôi không chắc chắn lý do tại sao họ đã chọn để làm điều này. – AdamMc331

Trả lời

10

Bạn có thể gọi một Runnable bằng phương thức Handler postDelayed().

Dưới đây là một ví dụ (http://developer.android.com/resources/articles/timed-ui-updates.html):

private Handler mHandler = new Handler(); 

... 

OnClickListener mStartListener = new OnClickListener() { 
    public void onClick(View v) { 
      mHandler.postDelayed(mUpdateTimeTask, 100); 
    } 
}; 

private Runnable mUpdateTimeTask = new Runnable() { 
    public void run() { 
     // do what you need to do here after the delay 
    } 
}; 

Props để @mad để nhận nó ngay lần đầu tiên xung quanh .

4

Bạn có thể sử dụng phương pháp postDelayed(Runnable action, long delayMillis) của số View để thêm Runnable vào hàng đợi thư được chạy sau một khoảng trễ (gần đúng).

+0

Điều này sẽ cho phép hành vi mong muốn của bạn mà không chặn chuỗi giao diện người dùng. –

28

Sử dụng cuộc gọi postDelayed() với một runnable khởi chạy hoạt động của bạn. Mã ví dụ có thể là

//will care for all posts 
    Handler mHandler = new Handler(); 

    //the button's onclick method 
    onClick(...) 
    { 
     mHandler.postDelayed(mLaunchTask,MYDELAYTIME); 
    } 

    //will launch the activity 
    private Runnable mLaunchTask = new Runnable() { 
     public void run() { 
      Intent i = new Intent(getApplicationContext(),MYACTIVITY.CLASS); 
      startActivity(i); 
     } 
    }; 

Lưu ý rằng điều này cho phép giao diện vẫn hoạt động. Sau đó, bạn nên cẩn thận khi xóa trình nghe onclick khỏi nút của mình.

11

Sử dụng này đang

new Handler().postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      final Intent mainIntent = new Intent(CurrentActivity.this, SecondActivity.class); 
      LaunchActivity.this.startActivity(mainIntent); 
      LaunchActivity.this.finish(); 
     } 
    }, 4000); 
0

Đôi khi, u cần phải làm điều đó bất cứ khi nào quá trình ứng dụng của bạn bị giết hay không. Trong trường hợp đó bạn không thể sử dụng xử lý runnable hoặc tin nhắn bên trong quá trình của bạn. Trong trường hợp này, bạn chỉ có thể sử dụng AlarmManager cho điều này. Hy vọng ví dụ này giúp ai:

Intent intent = new Intent(); 
... 

PendingIntent pendingIntent = PendingIntent.getActivity(<your context>, 0, intent, PendingIntent.FLAG_ONE_SHOT); 
AlarmManager mgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
mgr.set(AlarmManager.RTC, <your delay>, pendingIntent); 
0
runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      new Handler().postDelayed(new Runnable(){ 
       @Override 
       public void run() { 
        Intent intent = new Intent(getApplicationContext(), MainActivity.class); 
        startActivity(intent); 
       } 
      }, 4000); 
     } 
    }); 
0

thử đoạn mã này

new Timer().schedule(new TimerTask() {   
    @Override 
    public void run() { 

     // run AsyncTask here.  


    } 
}, 3000); 
Các vấn đề liên quan