Android 不能破坏线程
我正在制作媒体播放器,我有进度条。 单击播放按钮后,线程将启动,这将设置进度条的进度。 单击“暂停”按钮时,线程将停止 但是,当我按下停止按钮时,我希望进度条回滚,并在单击播放时重新开始,因此我希望线程销毁,但我无法这样做。 当按下停止按钮时调用suspend()方法将给出:-Android 不能破坏线程,android,multithreading,progress-bar,android-progressbar,Android,Multithreading,Progress Bar,Android Progressbar,我正在制作媒体播放器,我有进度条。 单击播放按钮后,线程将启动,这将设置进度条的进度。 单击“暂停”按钮时,线程将停止 但是,当我按下停止按钮时,我希望进度条回滚,并在单击播放时重新开始,因此我希望线程销毁,但我无法这样做。 当按下停止按钮时调用suspend()方法将给出:- 03-24 13:17:27.855: ERROR/global(26971): java.lang.UnsupportedOperationException 我知道这是一种不推荐的方法,但请指导我如何在按下停止按
03-24 13:17:27.855: ERROR/global(26971): java.lang.UnsupportedOperationException
我知道这是一种不推荐的方法,但请指导我如何在按下停止按钮时销毁线程。以下是我的代码部分:-
public void onClick(View src) {
switch (src.getId()) {
case R.id.buttonStart:
if(DataManager.getInstance().getSongPause()=="y"){
myService.player.start();
DataManager.getInstance().setSongPause("n");
buttonStart.setVisibility(View.GONE);
buttonPause.setVisibility(View.VISIBLE);
// DataManager.getInstance().setWantsToPlaySong(true);
//DataManager.getInstance().setOnPausedSong("n");
//DataManager.getInstance().setOnPausedSong("y");
if(mt.paused==true){
mt.unPauseProgressBar();
}
}else{
stopService(new Intent(this, MyService.class));
DataManager.getInstance().setSong_uri(uri);
Intent intent = new Intent(this,MyService.class);
Bundle b = new Bundle();
b.putString("song_uri",uri );
intent.putExtras(b);
startService(intent);
buttonStart.setVisibility(View.GONE);
buttonPause.setVisibility(View.VISIBLE);
DataManager.getInstance().setOnPausedSong("y");
DataManager.getInstance().setPausedSongName(songName);
//Toast.makeText(this, "My Service Started "+DataManager.getInstance().getSongDuration(), Toast.LENGTH_LONG).show();
//new Thread(myThread).start();
}
//Toast.makeText(this, "My Service Started", Toast.LENGTH_LONG).show();
break;
case R.id.buttonStop:
Log.d(TAG, "onClick: stopping srvice");
stopService(new Intent(this, MyService.class));
buttonStart.setVisibility(View.VISIBLE);
buttonPause.setVisibility(View.GONE);
/*mt=null;
seekbar.setProgress(0);*/
mt.stopProgressBar();
//mt.destroy();
//mt.notify();
break;
case R.id.buttonforward:
stopService(new Intent(this, MyService.class));
current_song++;
FetchAllMusic fetchAllMusic = new FetchAllMusic();
fetchAllMusic.execute();
//new Thread(myThread).start();
break;
case R.id.buttonbackward:
Log.d(TAG, "onClick: stopping service");
stopService(new Intent(this, MyService.class));
if(current_song>0){
current_song--;
}
FetchAllMusic fetchAllMusic2 = new FetchAllMusic();
fetchAllMusic2.execute();
break;
case R.id.buttonPause:
buttonStart.setVisibility(View.VISIBLE);
buttonPause.setVisibility(View.GONE);
/* MyService myservice=new MyService();
myservice.onPause();*/
myService.player.pause();
// myThread.
DataManager.getInstance().setSongPause("y");
DataManager.getInstance().setWantsToPlaySong(false);
DataManager.getInstance().setOnPausedSong("n");
DataManager.getInstance().setPausedSongName(songName);
mt.pauseProgressBar();
/*try {
//Thread.sleep(10000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}*/
下面是我的线程类:-
class myThread extends Thread implements Runnable{
// long duration=DataManager.getInstance().getSong_duration();
//long value=duration/100;
private volatile boolean paused = false;
private volatile boolean finished = false;
@Override
public void run()
{
while(!finished){
while (myProgress
类myThread扩展线程实现可运行{
//long duration=DataManager.getInstance().getSong_duration();
//长值=持续时间/100;
private=false;
private volatile boolean finished=false;
@凌驾
公开募捐
{
当(!完成){
虽然(我的进步)
停止进度条给出了上面提到的错误U不能使用挂起或销毁方法来停止线程。。。 按下停止按钮时..
用这个 检查这段代码…这样做是最安全的方法,让线程在主循环中检查标志
class ScanningThread extends Thread {
// Must be volatile:
private volatile boolean stop = false;
public void run() {
while (!stop) {
System.out.println("alive");
}
if (stop)
System.out.println("Detected stop");
}
public synchronized void requestStop() {
stop = true;
}
}
public synchronized void startThread(){
if(runner == null){
android.util.Log.v("@@@@@@@@@@@@@@@@@@@@", "DoScan.startthread");
runner = new ScanningThread();
runner.start();
}
}
public synchronized void stopThread(){
if(runner != null){
android.util.Log.v("@@@@@@@@@@@@@@@@@@@@", "DoScan.stopthread");
runner.requestStop();
runner = null;
}
}
希望这有帮助。ok我已经在oncreate-->mt=new myThread()中添加了这段代码;我在单击Listener-->mt.finished=true的停止按钮中设置变量finished;它没有效果。我应该在这之后调用notify吗?我已经尝试了所有可能的语法,但仍然无法处理进度条从未停止的问题