0
我想要做的是運行一種方法,在ToggleButton處於打開狀態時從我的資源播放隨機聲音。然後在ToggleButton關閉時停止。問題是,按照目前的構建,我的代碼與UI線程鎖定。我以爲我正確使用AsyncTask,但顯然不是。Android ToggleButton - 在不鎖定UI線程的情況下啓用某些功能
你能提出一個解決這個或更好的方法來完成我想要的?
public void onToggleClicked(View view) {
// Is the toggle on?
boolean on = ((ToggleButton) view).isChecked();
while (on) {
AssetManager assetMgr = this.getAssets();
try {
String[] filename = assetMgr.list("sounds");
Random r = new Random();
String fn = filename[r.nextInt(filename.length)];
if (MyService.mp.isPlaying()) {
}
else {
new PlayShuffleMode().execute(fn);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
這裏是的AsyncTask方法:
private class PlayShuffleMode extends AsyncTask<String, Void, Void> {
@Override
protected Void doInBackground(String... fn) {
mService.playfav(fn[0]);
return null;
}
}
如何從AsyncTask中檢查ToggleButton是否仍然打開?上面的代碼只需運行一次AsyncTask(打開切換按鈕後)。 – explosivo
謝謝。這讓我朝着正確的方向前進。目前,我無法弄清楚如何從AsyncTask中檢查ToggleButton的狀態。看起來我需要傳遞狀態,也許我可以在onPostExecute()方法中檢查它。 – explosivo
您不必檢查AsyncTask中的狀態。當你點擊切換按鈕'onToggleClicked()'時會調用並檢查ToggleButton的狀態。如果它打開,創建AsyncTask,緩存它並執行它。它會一直播放,直到再次按下onToggleClicked()。如果狀態爲關閉狀態,請使用緩存的AsyncTask並調用'cancel()'取消將結束播放的任務。我編輯了上面的代碼,使其更加清晰。 –