onCreate()
วิธีการของคุณมีข้อบกพร่องมากมาย:
1) onCreate
เตรียมกิจกรรมของคุณ - ดังนั้นผู้ใช้จะมองไม่เห็นสิ่งใดที่คุณทำที่นี่จนกว่าวิธีนี้จะเสร็จสิ้น! ตัวอย่างเช่นคุณจะไม่สามารถแก้ไขTextView
ข้อความที่นี่ได้มากกว่าหนึ่งครั้งเนื่องจากการเปลี่ยนแปลงสุดท้ายเท่านั้นที่จะถูกดึงออกมาและทำให้ผู้ใช้มองเห็นได้!
2) โปรดทราบว่าโปรแกรม Android จะ - โดยเริ่มต้น - ทำงานในหนึ่งกระทู้เท่านั้น! ดังนั้น: ห้ามใช้Thread.sleep()
หรือThread.wait()
ในเธรดหลักของคุณซึ่งรับผิดชอบ UI ของคุณ! (อ่าน"ให้แอปของคุณตอบสนองต่อ"สำหรับข้อมูลเพิ่มเติม!)
การเริ่มต้นกิจกรรมของคุณคืออะไร:
- คุณสร้าง
TextView
วัตถุใหม่โดยไม่มีเหตุผลt
!
- คุณเลือกเค้าโครงของคุณ
TextView
ในตัวแปรในt
ภายหลัง
- คุณตั้งค่าข้อความของ
t
(แต่โปรดจำไว้ว่ามันจะปรากฏขึ้นหลังจาก onCreate()
เสร็จสิ้นและลูปเหตุการณ์หลักของแอปพลิเคชันของคุณจะทำงาน!)
- คุณรอ10 วินาทีภายใน
onCreate
วิธีการของคุณ- สิ่งนี้จะต้องไม่เกิดขึ้นเนื่องจากหยุดกิจกรรม UI ทั้งหมดและจะบังคับ ANR อย่างแน่นอน (แอปพลิเคชันไม่ตอบสนองดูลิงก์ด้านบน!)
- จากนั้นคุณตั้งค่าข้อความอื่น - ข้อความนี้จะแสดงทันทีที่
onCreate()
วิธีการของคุณเสร็จสิ้นและวิธีการอื่น ๆ ของวงจรชีวิตของกิจกรรมได้รับการประมวลผล!
การแก้ไขปัญหา:
ตั้งค่าข้อความเพียงครั้งเดียวonCreate()
- ต้องเป็นข้อความแรกที่ควรมองเห็นได้
สร้างRunnable
และHandler
private final Runnable mUpdateUITimerTask = new Runnable() {
public void run() {
t.setText("Second text to display!");
}
};
private final Handler mHandler = new Handler();
ติดตั้ง runnable นี้เป็นตัวจัดการที่เป็นไปได้ในonCreate()
(แต่อ่านคำแนะนำของฉันด้านล่าง):
mHandler.postDelayed(mUpdateUITimerTask, 10 * 1000);
คำแนะนำ: ต้องแน่ใจว่าคุณรู้จักActivity
วงจรชีวิต! หากคุณทำสิ่งonCreate()
นี้ในสิ่งนี้จะเกิดขึ้นเมื่อคุณActivity
สร้างครั้งแรกเท่านั้น! Android อาจทำให้คุณActivity
มีชีวิตอยู่ได้นานขึ้นแม้ว่าจะมองไม่เห็นก็ตาม! เมื่อผู้ใช้ "เริ่ม" อีกครั้ง - และยังคงมีอยู่คุณจะไม่เห็นข้อความแรกของคุณอีกต่อไป!
=> ติดตั้งตัวจัดการเสมอonResume()
และปิดการใช้งานในonPause()
! มิฉะนั้นคุณจะได้รับ "การอัปเดต" เมื่อคุณActivity
มองไม่เห็นเลย! ในกรณีของคุณหากคุณต้องการเห็นข้อความแรกของคุณอีกครั้งเมื่อเปิดใช้งานอีกครั้งคุณต้องตั้งค่าonResume()
ไม่ใช่onCreate()
!
.setText()
แทนที่ "วิดเจ็ต" ทั้งหมดด้วยข้อความที่คุณบอกให้ตั้งค่า รวมถึงข้อความที่คุณได้ใส่ไว้แล้ว