Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在ANDROID中,如何在以下情况下停止正在运行的线程_Java_Android_Multithreading_Media Player - Fatal编程技术网

Java 在ANDROID中,如何在以下情况下停止正在运行的线程

Java 在ANDROID中,如何在以下情况下停止正在运行的线程,java,android,multithreading,media-player,Java,Android,Multithreading,Media Player,在我的应用程序中,当用户点击一个拼写按钮时,它会播放音频来读出一个单词的字母,并显示每个字母。它成功地实现了 我用滑动手势来改变单词。如果用户滑动屏幕,则应显示另一个单词。而且它也成功地实现了 问题: 当音频播放时,如果用户滑动,则音频应停止并显示下一个单词。(我猜正在运行的线程应停止) 我该怎么做?有什么解决办法吗? 代码大纲: public class BirdsActivity extends Activity implements OnClickListener{ //On creat

在我的应用程序中,当用户点击一个拼写按钮时,它会播放音频来读出一个单词的字母,并显示每个字母。它成功地实现了

我用滑动手势来改变单词。如果用户滑动屏幕,则应显示另一个单词。而且它也成功地实现了

问题:
当音频播放时,如果用户滑动,则音频应停止并显示下一个单词。(我猜正在运行的线程应停止

我该怎么做?有什么解决办法吗?

代码大纲:

public class BirdsActivity extends Activity implements OnClickListener{

//On createMethod*(){
.
.
  //on Spell button click run a thread to play audio and draw text
    new DrawLetter("AlphaKids").start();

// initiate Gesture detection

  }


class DrawLetter extends Thread {
    String tempName=names[position];    
    String b="";
    int i=0;
    public DrawLetter(String str) {
    super(str);
    }
    public void run() {

        for (int i = 0; i < names[position].length(); i++) {
     runOnUiThread(new Runnable()
                {               
                     public void run() 
                  {     txtFrontName.setText(b); }

                });

            mPlayVoice = MediaPlayer.create(BirdsActivity.this, mAlphabetsSound[letterPosition]);
                mPlayVoice.start();
                try {
            sleep(500); 
            mPlayVoice.release();
            } catch (InterruptedException e) {}
     }}
.
.
.
  // Gesture detection class

@Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {

      //if  valid swipe is performed
      {  
            //i want to stop(or Distroy) the above thread here

     }
} }
public类BirdsActivity扩展活动实现OnClickListener{
//关于createMethod*(){
.
.
//在“拼写”按钮上,单击“运行线程”播放音频并绘制文本
新的提款信(“AlphaKids”).start();
//启动手势检测
}
类DrawLetter扩展线程{
字符串tempName=名称[位置];
字符串b=“”;
int i=0;
公开提款信(String str){
超级(str);
}
公开募捐{
对于(int i=0;i
我想你不必自己破坏线程。停止音乐mPlayVoice.Stop();因为变量是在UIThread中声明的……它可以在UIThread中访问,你可以从那里停止播放机。最可能是在handler中

 mPlayVoice.stop()

/编辑


抱歉..mPlayVoice.stop()停止mediya player,但当线程再次运行时,它将再次启动抱歉..mPlayVoice.stop()停止MyTya播放器,但当线程再次运行时,Stisti不太理解你的代码。为什么MyaPoad会在你的线程中循环?你在播放多个文件吗?考虑更新你的问题,让它更清楚。OK……初始化你的MpAudio在UI线程中,而不是初始化成新线程的运行方法。李。ke mPlayVoice=MediaPlayer.create(BirdsActivity.this,mAlphabetsSound[letterPosition]);在UIThread中执行此操作。我的意思是在runOnUIThread行上方的代码中…我想它现在应该可以解决您的问题了problem@success_anil无论如何,对不起..我可以停止媒体播放器,但线程仍在运行否?这不会有问题吗?嗯。您可以使用android中的处理程序在UIThread和其他线程之间切换。成功后将您的问题发送给我_anil@yah我将发送一个代码来实现处理程序…您可以根据需要修改代码
boolean shouldPlayVoice = true;
...
if(shouldPlayVoice){
mPlayVoice.start();
}
...
mPlayVoice.stop();
shouldPlayVoice = false;