Semua Tampilan sudah menyiapkan penangannya, sehingga tidak efisien untuk membuat penangan lainnya. Sebagai gantinya, Anda harus menggunakan metode post(Runnable action) kelas View atau postDelayed(Runnable action, long delayMillis).
Sejauh apa yang ingin Anda capai, saya berasumsi bahwa kode yang Anda berikan hanya sebagai contoh. Jika Anda benar-benar hanya mencoba memperbarui beberapa teks, menurut saya gunakan TextView dan panggil setText di atasnya. TextView menangani pembatalan dirinya sendiri ketika mengetahui teksnya telah berubah.
Tapi kembali ke pertanyaan Anda. Banyak hal bergantung pada kecepatan Anda ingin memperbarui rendering variabel count Anda. Saat ini Anda akan berjalan dalam putaran tanpa akhir di UI Thread. Hal ini pastinya akan menimbulkan masalah karena Anda akan mengirim spam ke handler/antrian kejadian dengan panggilan yang tidak valid sekaligus mencegah hal lain berjalan di UI Thread.
Sebagai gantinya, saya mengusulkan untuk memperkenalkan penundaan waktu yang dapat dikonfigurasi, dan cara untuk berhenti memperbarui tampilan.
Misalnya, Anda dapat mengatur sesuatu untuk membatalkan tampilan Anda setiap 10 detik sekali dan hanya memperbarui penghitung saat tampilan Anda dilampirkan ke jendela seperti itu (perhatikan bahwa Runnable sendiri yang bertanggung jawab apakah ia harus dijalankan kembali berdasarkan nilai bendera updateView):
public class ThreadView extends View {
private class UpdateViewRunnable implements Runnable {
public void run() {
count++;
invalidate();
if (updateView) {
postDelayed(this, DELAY_TIME_MILLIS);
}
}
}
private static final long DELAY_TIME_MILLIS = 100L;
private boolean updateView = false;
private UpdateViewRunnable updateViewRunnable = new UpdateViewRunnable();
private Paint paint = new Paint();
private int count;
public ThreadView(Context context) {
super(context);
init(context, null);
}
public ThreadView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context, attrs);
}
private void init(Context context, AttributeSet attrs) {
paint.setColor(Color.BLACK);
paint.setTextSize(80);
}
@Override
public void onDraw(Canvas canvas) {
canvas.drawText(count + "", 100, 100, paint);
}
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
updateView = true;
postDelayed(updateViewRunnable, DELAY_TIME_MILLIS);
}
@Override
public void onDetachedFromWindow() {
updateView = false;
super.onDetachedFromWindow();
}
}
person
Michael Krause
schedule
10.06.2015
onDraw
tidak dipanggil di dalam thread Anda. Anda hanya menambah variabelcount
. Mungkin Anda bisa mencoba memanggil metodedrawText
dari dalamRunnable
Anda. - person Thyen Hong Guedes Chang   schedule 11.06.2015