20.11.2016 Views

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!