2013-01-08 53 views
2

在我的android应用程序中,我在线提取歌词。这个任务在后台使用AsyncTask类执行。在doInbackground()中,我调用另一个类获取歌词的方法。我想使用AsyncTask的cancel()方法停止从mycurrent活动执行其他类的方法。但它不会停止当前活动外的方法的执行。有没有办法停止执行该方法的执行?当用户滑动屏幕时,停止执行AsyncTask的doInbackground()方法

这里是我的代码..

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); 
        } 
       } 
} 
+0

具备检测挥笔您尝试在Activity onpause中取消AsyncTask执行? –

回答

0

我假设你要停止你的AsyncTask当你的主要活动是没有运行或者不是用户关注的焦点。基于此:

当您的活动失去焦点时,系统会呼叫onPause()后跟onStop()。应用程序通过重写Activity的这两个函数来完成所有清理。所以,无论是在onPause()onStop(),你应该增加:

DownloadWebPageTask.cancel(true) 

对于这个工作,你应该有static访问任务类。

[更新]您也可以在onDestroy()中执行此操作,该操作在活动被终止时调用。

[更新]如果你想只取消该任务时,用户刷卡,然后使用onFling()事件监听器是这样的:

SimpleOnGestureListener simpleOnGestureListener = new SimpleOnGestureListener(){ 

     @Override 
     public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,){ 
      // handle swipe event 
     } 
    }; 

还检查了Gesture Overlay View,如果你想在小部件

+0

我编辑了我的代码,我在onFling事件中做了它。它是否正确? – zanky

+0

是的,你可以使用它。我已经更新了我的回答 –

+0

但是..它不适用于这个代码。然后调用另一个类的方法。 – zanky

相关问题