안드로이드 코딩하다보면 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();

 

+ Recent posts