안드로이드 코딩하다보면 1초후에 동작 같은 기능이 필요할때가 있다.
이럴경우 handler을 사용하면 된다.
단순히 1초후에 실행하고, 실행이 끝난후 확인하는 기능
new Handler().postDelayed(new Runnable() {// 1 초 후에 실행
@Override
public void run() {
// 실행할 동작 코딩
mHandler.sendEmptyMessage(0); // 실행이 끝난후 알림
}
}, 1000);
Handler mHandler = new Handler() {
public void handleMessage(Message msg) { // 실행이 끝난후 확인 가능
}
};
handler를 이용한 값 전달 예제
mHandler.sendMessage(Message.obtain(mHandler,2)); // 2값을 전달하면서 핸들러 호출
...
public Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
switch(msg.what){
case 2: // 호출되는 내용break;
}
}
};
3초후에 실행
private Handler mHandler = new Handler();
mHandler.postDelayed(mMyTask, 3000); // 3초후에 실행
private Runnable mMyTask = new Runnable() {
@Override
public void run() {
// 실제 동작
}
};
3초후에 실행하려고 했으나 취소해야할 경우는
mHandler.removeCallbacksAndMessages(null);
0.5초 후에 실행하고 실행시 메시지를 전달하며, 실행후 받은 메시지에 따라 처리하는 기능
new Handler().postDelayed(new Runnable() {// 0.5 초 후에 실행
@Override
public void run() {
// 실행할 동작 코딩
Message msg1 = mHandler.obtainMessage(); //사용할 핸들러를 이용해서 보낼 메시지 객체 생성
Bundle b1 = new Bundle(); //메시지를 담을 번들 생성
b1.putBoolean("END_AUTH", true); //번들에 메시지 추가
msg1.setData(b1); //메세지에 번들을 넣는다.
mHandler.sendMessage(msg1); //메세지를 핸들러로 넘긴다.
}
}, 500);
Handler mHandler = new Handler() {
public void handleMessage(Message msg) { // 실행이 끝난후 확인 가능
Bundle bd = msg.getData();
if(bd.getBoolean("END_AUTH")){
// 메시지를 받고 처리할 부분
}
}
};
참고1.. Thread를 이용한 바로 처리하는 방법
new Thread(new Runnable() {
@Override
public void run() {
// 로직처리
handler.sendEmptyMessage(0);
}
}).start();
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
// UI처리
}
};
참고2.. Timer를 이용한 처리방법
new Timer().schedule(new TimerTask() {
public void run() {
// UI 및 로직
}
}, 1000); // 1초후 실행
참고2-2.. Timer를 이용한 반복처리 방법
private Timer mTimer = null;
private TimerTask mTimerTask = null;
mTimer = new Timer();
mTimerTask = new TimerTask() {
@Override
public void run() {
// 반복될 코드 작성
// mTimer.cancel(); // 타이머 취소할경우
}
};
mTimer.schedule(mTimerTask, 500, 1000); // 0.5초이후 1초마다 반복 호출
참고3. Async Task를 이용한 바로 처리 방법
new AsyncTask() {
@Override
protected void onPreExecute() {
// UI 처리
super.onPreExecute();
}
@Override
protected Boolean doInBackground(String... params) {
// 로직 처리
return true;
}
@Override
protected void onProgressUpdate(Integer... progress) {
// UI 처리
}
@Override
protected void onPostExecute(Boolean result) {
// UI 처리
}
@Override
protected void onCancelled() {
super.onCancelled();
}
}.execute();
'안드로이드 개발 팁' 카테고리의 다른 글
Android keyboard, keypad (0) | 2012.05.22 |
---|---|
android sqlite insert 속도 향상 (0) | 2012.05.22 |
android 백그라운드 처리 작업 ( handler, AsyncTask ) (0) | 2012.05.09 |
android에서 assets에 있는 기존 sqlite DB 사용하기 (2) | 2012.05.07 |
안드로이드 디자인 (0) | 2012.05.03 |