Timer Task 와 Handler 지연 다 중 스 레 드
Timer 와 Timer Task 는 하나의 지연 기 를 구축 할 수 있 습 니 다. 마치 하나의 스 레 드 를 열 고 정 해진 시간 마다 한 번 씩 방문 하 는 것 과 같 습 니 다.이 스 레 드 에서 이 Timer 와 Timer Task 를 닫 을 수 있 습 니 다. 예 를 들 어 지금 제 가 온라인 게임 계 정 로그 인 시간 초과 클 라 이언 트 의 검 측 을 하려 고 합 니 다. 사용자 가 계 정 비밀 번 호 를 입력 하고 로그 인 을 클릭 할 때 저 는 Timer Task 를 열 어서 1 초 마다 사용자 가 로그 인 했 는 지 확인 하고 10 초 후에 로그 인 에 성공 하지 못 하면 로그 인 시간 초과 알림 을 합 니 다.이 럴 때 저 는 이 검 측 스 레 드 에서 Timer 와 Timer Task 를 닫 아야 합 니 다. 순환 검사 가 필요 없 으 니까.cancel () 을 호출 하면 닫 을 수 있 습 니 다. 다음 예 를 읽 어 보 세 요.
:
import java.util.Timer;
import java.util.TimerTask;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class TimerTaskActivity extends Activity {
/** Timer **/
public final static int LOAD_PROGRESS = 0;
/** Timer **/
public final static int CLOSE_PROGRESS = 1;
/** TimerTask **/
Button mButton0 = null;
/** TimerTask **/
Button mButton1 = null;
/** **/
TextView mTextView = null;
Context mContext = null;
/**Timer **/
Timer mTimer = null;
/**TimerTask **/
TimerTask mTimerTask = null;
/** TimerID**/
int mTimerID = 0;
/** **/
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case LOAD_PROGRESS:
mTextView.setText(" TimerID " + msg.arg1 );
break;
case CLOSE_PROGRESS:
mTextView.setText(" Timer " );
break;
}
super.handleMessage(msg);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.timer);
mContext = this;
/** button TextView **/
mButton0 = (Button) findViewById(R.id.button0);
mButton1 = (Button) findViewById(R.id.button1);
mTextView = (TextView) findViewById(R.id.textView0);
mTextView.setText(" ");
//
mButton0.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// timer
StartTimer();
}
});
//
mButton1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// timer
CloseTimer();
}
});
super.onCreate(savedInstanceState);
}
public void StartTimer() {
if (mTimer == null) {
mTimerTask = new TimerTask() {
public void run() {
//mTimerTask mTimer 1
mTimerID ++;
Message msg = new Message();
msg.what = LOAD_PROGRESS;
msg.arg1 = (int) (mTimerID);
handler.sendMessage(msg);
}
};
mTimer = new Timer();
// mTimerTask
// 1000 mTimerTask 1
// 1000 1 mTimerTask Run
mTimer.schedule(mTimerTask, 1000, 1000);
}
}
public void CloseTimer() {
// mTimer mTimerTask
if (mTimer != null) {
mTimer.cancel();
mTimer = null;
}
if (mTimerTask != null) {
mTimerTask = null;
}
/**ID **/
mTimerID = 0;
// what
handler.sendEmptyMessage(CLOSE_PROGRESS);
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Codility Lesson3】FrogJmpA small frog wants to get to the other side of the road. The frog is currently located at position X and wants to get to...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.