Android开发-初识多线程/线程的创建,开启,休眠,中断

Android开发--初识多线程/线程的创建,开启,休眠,中断

     在Android开发中有一项非常重要的技术---多线程,本文针对线程的创建,开启,休眠和中断做介绍。

     如同在JAVA开发中一样,在Android中,提供了两种方法创建线程,一种是通过Thread类的构造方法创建线程对象,并重写run()方法,另一种是实现Runnable接口,本实例中用到的方法是第一种,第二种方法类似。

    本实例实现的是在另一个线程中播放音乐,并使用一个按钮中断线程的运行。

    实现的截图如下:

Android开发-初识多线程/线程的创建,开启,休眠,中断

源代码如下所示:

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秒后重复播放音乐,当用户点击第二个按钮时,结束音乐的播放,同时线程中断。