는 UI 스레드에서 나중에 메소드를 호출합니다.
실제로이 이미 안드로이드에서 수행하는 방법에 대한 아주 좋은 기사 있습니다 : http://developer.android.com/resources/articles/timed-ui-updates.html
당신은, 또는 뷰에 getHandler()
를 호출하여 UI 스레드에서 실행되는 코드를 생성하여 하나의 핸들러를 얻을 수 있습니다 (예 : 귀하의 버튼 자체).
나는 예제를 제공 하겠지만 링크 된 기사는 이미 매우 상세하고 명료하게 작성되어 있으므로 참고할 것입니다.
편집 : 여기 어떻게 보이는지 대략적인 개요가 나와 있습니다. 지금 Android SDK가 설치되어 있지 않아이 기능이 작동하는지 확인할 수 없습니다.
public class CountdownButton extends Button {
private boolean isCounting = false;
private int count;
private final Runnable countdownRunnable = new Runnable() {
@Override
public void run() {
setText(Integer.toString(count));
if (count > 0) {
count--;
getHandler().postDelayed(countdownRunnable, 1000);
} else {
// count reached zero
isCounting = false;
setText("boom");
}
}
}
private final View.OnClickListener onClickListener = new View.OnClickListener() {
@Override
public void onClick(View view) {
if (isCounting) {
// stop counting
isCounting = false;
getHandler().removeCallbacks(countdownRunnable);
setText("cancelled");
} else {
// start counting
isCounting = true;
count = 10;
countdownRunnable.run();
}
}
}
public CountdownButton(Context context) {
super(context);
setOnClickListener(onClickListener);
}
public CountdownButton(Context context, AttributeSet attrs) {
super(context, attrs);
setOnClickListener(onClickListener);
}
public CountdownButton(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
setOnClickListener(onClickListener);
}
}
타이밍
완벽하지 않을 수 있습니다 (다른 CPU 작업이 진행이 많이있다 특히), 그러나 당신의 목적을 위해 충분해야한다.
asynctask를 사용하여 단추 텍스트를 업데이트하십시오. –