Android 单击后按钮保持按下状态,直到方法结束

Android 单击后按钮保持按下状态,直到方法结束,android,button,soundpool,Android,Button,Soundpool,我想使用相同的按钮启动和停止播放一些带有for循环的函数play()的声音。 我本想使用lock变量来实现这一点,但单击后的按钮一直保持按下状态,直到函数play end执行为止。 你能提出一些解决办法吗 我的情况是这样的: public class MainActivity extends Activity { private static SoundPool sound; static int lock=1; int s; @Override public void

我想使用相同的按钮启动和停止播放一些带有for循环的函数play()的声音。 我本想使用lock变量来实现这一点,但单击后的按钮一直保持按下状态,直到函数play end执行为止。 你能提出一些解决办法吗

我的情况是这样的:

public class MainActivity extends Activity {
   private static SoundPool sound;
   static int lock=1;
   int s;

   @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    sound=new SoundPool(20, AudioManager.STREAM_MUSIC, 100);
    s=sound.load(this,R.raw.bipsound, 0);
    Button button = (Button) findViewById(R.id.button);

}
public void onClick(View v) {
    switch(lock) {
        case 0: 
            lock=1;
            break;

        case 1:
            lock=0;
            play();
            break;  
    }   
}

public void play(){
    for(int i=0;i<10;i++){
        sound.play(s,1.0f, 1.0f, 1, 0, 1);
        if(lock==1)
            return;
        try {Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

}
公共类MainActivity扩展活动{
私人静态声池声音;
静态int-lock=1;
int-s;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
声音=新的声音池(20,AudioManager.STREAM_MUSIC,100);
s=声音。负载(这个,R.raw.bipsound,0);
Button Button=(Button)findViewById(R.id.Button);
}
公共void onClick(视图v){
开关(锁){
案例0:
lock=1;
打破
案例1:
lock=0;
play();
打破
}   
}
公共游戏{

对于(int i=0;i这是一个问题
尝试{Thread.sleep(1000);
内部
play()
。您正在告诉主
线程
睡眠
这几乎总是一个坏主意。
按钮
被按下并保持该状态,直到
sleep()
时间结束


删除那一行。我不确定你想在那里完成什么,但你可以在一个单独的
线程中运行它,比如
TimerTask
,使用
处理程序或其他类似功能。如果你需要更多帮助,请解释你想用它做什么。

这是正常的,因为你正在使用
尝试{Thread.sleep(1000);
,它会在1秒内停止主线程

您必须使用AsyncTask来完成此任务:)

这里有一个例子

private void goToMainActivity() {
        new AsyncTask<Void, Void, Void>() {

            @Override
            protected Void doInBackground(Void... params) {
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                return null;
            }

            @Override
            protected void onPostExecute(Void result) {
                super.onPostExecute(result);
                Intent intent = new Intent(fa, Main.class);
                startActivity(intent);
            }
        }.execute();
    }
private void goToMainActivity(){
新建异步任务(){
@凌驾
受保护的Void doInBackground(Void…参数){
试一试{
睡眠(1000);
}捕捉(中断异常e){
e、 printStackTrace();
}
返回null;
}
@凌驾
受保护的void onPostExecute(void结果){
super.onPostExecute(结果);
意向意向=新意向(fa,Main.class);
星触觉(意向);
}
}.execute();
}