在Android开发中有一项非常重要的技术---多线程,本文针对线程的创建,开启,休眠和中断做介绍。
如同在JAVA开发中一样,在Android中,提供了两种方法创建线程,一种是通过Thread类的构造方法创建线程对象,并重写run()方法,另一种是实现Runnable接口,本实例中用到的方法是第一种,第二种方法类似。
本实例实现的是在另一个线程中播放音乐,并使用一个按钮中断线程的运行。
实现的截图如下:
源代码如下所示:
public class MultiThread_Activity extends Activity {
private Thread thread;
private static MediaPlayer mPlayer=null;
private Button button;
private Button button2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_multi_thread_);
button=(Button)findViewById(R.id.button);
button2=(Button)findViewById(R.id.button3);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
((Button)arg0).setEnabled(false);
thread=new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
playSound();
}
});
thread.start();
}
});
button2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
if(thread!=null){
thread.interrupt();
thread=null;
}
if(mPlayer!=null){
mPlayer.stop();
mPlayer.release();
mPlayer=null;
}
button.setEnabled(true);
}
});
}
public void playSound() {
if(mPlayer!=null){
mPlayer.release();
}
mPlayer=MediaPlayer.create(MultiThread_Activity.this,R.raw.tongnian);
mPlayer.start();
mPlayer.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer arg0) {
// TODO Auto-generated method stub
try {
Thread.sleep(5000);
playSound();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
});
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
if(mPlayer!=null){
mPlayer.stop();
mPlayer.release();
mPlayer=null;
}
if (thread!=null) {
thread=null;
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_multi_thread_, menu);
return true;
}
}
说明:
当用户点击第一个按钮时,开始播放音乐,当音乐播放完毕后,线程休眠5秒后重复播放音乐,当用户点击第二个按钮时,结束音乐的播放,同时线程中断。