私の Android アプリケーションでは、オンラインで歌詞を取得しています。このタスクは、AsyncTask クラスを使用してバックグラウンドで実行されます。doInbackground() では、歌詞を取得するために別のクラスのメソッドを呼び出しています。AsyncTask の cancel() メソッドを使用して、現在のアクティビティから別のクラスのメソッドの実行を停止したい。ただし、現在のアクティビティ以外のメソッドの実行は停止しません。そのメソッドの実行を停止する方法はありますか?
これが私のコードです..
public class musicplayer extends Activity
{
DownloadWebPageTask task;
public void playSong(int songIndex)
{
task = new DownloadWebPageTask();
task.execute(new String[] { title, artist });
}
private class DownloadWebPageTask extends AsyncTask<String, String, String>
{
@Override
protected void onPreExecute()
{
try
{
super.onPreExecute();
progressBar = (ProgressBar) findViewById(R.id.showLoading);
}
catch (Exception e)
{
e.printStackTrace();
}
}
@Override
protected String doInBackground(String... arg0)
{
try
{
if(! isCancelled())
{
// get lyrics
lyricsArray = SearchHelper.findLyrics(arg0[0], arg0[1]);
publishProgress(OutputString);
}
else
{
System.out.print("Cancelled");
}
}
catch (Exception ex) {
ex.printStackTrace();
}
return artistArray;
}
@Override
protected void onProgressUpdate(String... st)
{
super.onProgressUpdate(st);
progressBar.setVisibility(View.GONE);
tvMain.setText(Html.fromHtml(st[0].toString()));
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY)
{
try
{
task.cancel(true);
playSong(currentSongIndex + 1);
}
}
}