ANDROID APP
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
การส่งข้อมูลระหว่างเธรด: แฮนด์เลอร์ (Handler)<br />
กรรมวิธี: การใช้เธรดหลักเพื่อกำหนดช่วงเวลาในการทำงานของทาสก์<br />
ตอนนี้เราจะมาสร้างนาฬิกาจับเวลา ซึ่งมักถูกนำไปใช้ในหลายๆ แอพกัน ยกตัวอย่างเช่น ใช้ใน<br />
แอพเกมเพื่อจับเวลาในการเล่นเกมของแต่ละฉากและแสดงการจับเวลาบนอยู่จอภาพ เป็นต้น<br />
นาฬิกาจับเวลาจะทำงานอยู่ในเธรดย่อยแบบเบื้องหลัง ดังนั้นมันจะไม่ถูกขัดจังหวะการทำงาน<br />
จากเธรดหลัก แต่ทุกครั้งที่เวลามีการเปลี่ยนแปลง ตัวมันเองจะต้องส่งค่ากลับไปอัพเดตการแสดงผลที่<br />
จอภาพด้วย อย่างในชุดคำสั่งที่ 3.5 TextView จะเริ่มต้นทำงานโดยมีค่าเป็นคำกล่าวต้อนรับ<br />
และข้อความบนปุ่มที่มี ID เป็น trigger จะแสดงข้อความบนปุ่มเป็นคำว่า “Press Me”<br />
ชุดคำสั่งที่ 3.5 res/layout/main.xml<br />
59<br />
<br />
<br />
<br />
<br />
<br />
รีซอร์สข้อความในไฟล์ XML จะเกี่ยวข้องกับตัวแปร TextView ในจาวาแอคทิวิตี้ชื่อ BackgroundTimer<br />
ซึ่งจะใช้ค่าเริ่มต้นดังนี้<br />
mTimeLabel = (TextView) findViewById(R.id.text);<br />
mButtonLabel = (TextView) findViewById(R.id.trigger);<br />
นอกจากการกำหนดค่าของข้อความในจาวาแล้ว เรายังสามารถเปลี่ยนแปลงค่าดังกล่าวใน<br />
ระหว่างที่แอพกำลังทำงานอยู่ได้เช่นกัน เมื่อแอพเริ่มทำงาน mUpdateTimeTask จะเริ่มต้นจับเวลา<br />
และแก้ไขข้อมูลใน mTimeLabel ด้วยค่าของนาทีและวินาทีในขณะนั้น และเมื่อปุ่มถูกกด เมธอด<br />
onClick() ก็จะแก้ไขข้อความของ mButtonLabel ด้วยจำนวนครั้งของการกดปุ่ม<br />
ในขณะเดียวกันแฮนด์เลอร์ชื่อ mHandler ก็จะถูกสร้างขึ้นและใช้ลำดับการทำงานของ<br />
mUpdateTimeTask ซึ่งถูกเรียกใช้งานครั้งแรกในเมธอด onCreate() และจะทำงานแบบเรียกตัวแอง<br />
(Recursive) ไปเรื่อยๆ เพื่ออัพเดตเวลาทุกๆ 200 มิลลิวินาที ซึ่งค่านี้จะให้การแสดงผลดูราบรื่นกว่า<br />
การกำหนดระยะเวลาอัพเดตเป็น 1 วินาที คุณสามารถดูตัวอย่างของแอคทิวิตี้นี้ได้ในชุดคำสั่งที่ 3.6