20.11.2016 Views

ANDROID APP

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

54 บทที่ 3 เธรด เซอร์วิส รีซีฟเวอร์ และการแจ้งเตือน<br />

สิ่งหนึ่งที่ควรคำนึงถึงเมื่อมีการใช้งานเธรดย่อยก็คือ เมื่อเราสั่งให้เธรดย่อยทำงานไปแล้ว<br />

เธรดย่อยก็จะทำงานต่อไปเรื่อยๆ แม้ว่าเธรดหลักจะหยุดการทำงานก็ตาม โดยเมื่อเรากดปุ่ม Back<br />

เพื่อกลับไปยังหน้าจอ Home ในระหว่างที่กำลังเล่นเสียงอยู่ เสียงที่เล่นอยู่นั้นก็จะยังเล่นต่อเนื่องไปจน<br />

จบ เหตุการณ์นี้เกิดขึ้นเพราะว่าเรายังไม่ได้กำหนดค่าให้แก่ฟังก์ชั่น play_music เพื่อตรวจสอบค่า<br />

แฟล็ก (Flag) (ในที่นี้ก็คือสถานะ paused) ซึ่งค่านี้ถูกกำหนดจากฟังก์ชั่น onPause() ของแอคทิวิตี้<br />

หลัก เราจะใช้ค่าแฟล็กนี้เพื่อหยุดการเล่นเสียงเมื่อเธรดหลักหยุดทำงาน<br />

การทำงานในข้างต้นนี้จะรวมอยู่ในแอคทิวิตี้ชื่อ PressAndPlay ดังชุดคำสั่งที่ 3.3<br />

ชุดคำสั่งที่ 3.3 src/com/cookbook/launch_thread/PressAndPlay.java<br />

package com.cookbook.launch_thread;<br />

import android.app.Activity;<br />

import android.media.MediaPlayer;<br />

import android.os.Bundle;<br />

import android.view.View;<br />

import android.widget.Button;<br />

public class PressAndPlay extends Activity {<br />

@Override<br />

public void onCreate(Bundle savedInstanceState) {<br />

super.onCreate(savedInstanceState);<br />

setContentView(R.layout.main);<br />

Button startButton = (Button) findViewById(R.id.trigger);<br />

startButton.setOnClickListener(new View.OnClickListener() {<br />

public void onClick(View view){<br />

}<br />

});<br />

}<br />

//standalone play_music() function call causes<br />

//main thread to hang. Instead, create<br />

//separate thread for time-consuming task<br />

Thread initBkgdThread = new Thread(new Runnable() {<br />

public void run() {<br />

play_music();<br />

}<br />

});<br />

initBkgdThread.start();<br />

int[] notes = {R.raw.c5, R.raw.b4, R.raw.a4, R.raw.g4};<br />

int NOTE_DURATION = 400; //millisec<br />

MediaPlayer m_mediaPlayer;<br />

private void play_music() {

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

Saved successfully!

Ooh no, something went wrong!