ข้อมูลพร็อพเพอร์ตี้ทั้งหมดมีตัวจัดการที่ตั้งค่าไว้แล้ว ดังนั้นการสร้างอันใหม่จึงไม่มีประสิทธิภาพ คุณควรใช้เมธอด post(Runnable action) หรือ postDelayed(Runnable action, long DelayMillis) ของคลาส View แทน
เท่าที่คุณกำลังพยายามทำให้สำเร็จ ฉันกำลังสันนิษฐานว่าโค้ดที่คุณให้มานั้นเป็นเพียงเพื่อใช้เป็นตัวอย่างเท่านั้น หากคุณแค่พยายามอัปเดตข้อความจริงๆ ฉันจะบอกว่าลองใช้ TextView แล้วเรียก setText ลงไป TextView ดูแลการทำให้ตัวเองใช้ไม่ได้เมื่อรู้ว่าข้อความมีการเปลี่ยนแปลง
แต่กลับไปที่คำถามของคุณ ส่วนใหญ่ขึ้นอยู่กับอัตราที่คุณต้องการอัปเดตการเรนเดอร์ตัวแปรการนับของคุณ ขณะนี้คุณจะทำงานวนซ้ำไม่สิ้นสุดบน UI Thread สิ่งนี้จะทำให้เกิดปัญหาอย่างแน่นอน เนื่องจากคุณจะสแปมตัวจัดการ/คิวเหตุการณ์ด้วยการเรียกที่ไม่ถูกต้อง ในขณะเดียวกันก็ป้องกันไม่ให้สิ่งอื่นใดทำงานบน UI Thread
ฉันขอเสนอให้แนะนำการหน่วงเวลาที่สามารถกำหนดค่าได้ และวิธีหยุดการอัปเดตมุมมองแทน
ตัวอย่างเช่น คุณสามารถตั้งค่าต่างๆ เพื่อทำให้มุมมองของคุณใช้ไม่ได้ทุกๆ 10 วินาที และให้อัปเดตตัวนับเท่านั้นในขณะที่มุมมองของคุณแนบไปกับหน้าต่างเช่นนั้น (โปรดทราบว่า Runnable มีหน้าที่รับผิดชอบเองว่าควรจะทำงานอีกครั้งหรือไม่โดยอิงจาก ค่าของแฟล็ก 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
ภายในเธรดของคุณ คุณกำลังเพิ่มตัวแปรcount
เท่านั้น บางทีคุณอาจลองเรียกเมธอดdrawText
จากภายในRunnable
ของคุณ - person Thyen Hong Guedes Chang   schedule 11.06.2015