这是我的上下文:我有一个活动,可以下载视频列表并将其设置为适配器。当用户点击每个项目时,应用程序会在外部应用程序中下载和流式传输视频。 所以,让我们看一些代码。主要活动有:
new TvAsyncTask(getActivity(), gridView, progressBar).execute();
TvAsyncTask下载视频列表并将其设置为:
protected void onPostExecute(ArrayList<VideoPreviewData> list) {
progressBar.setVisibility(View.INVISIBLE);
final TvListAdapter adapter = new TvListAdapter(activity.getApplicationContext(), R.layout.item_video_list, list);
videoGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, final View view, int position, long id) {
String videoUrl = adapter.getItem(position).getLink();
//Launch asyncTask to download video an load it into an external media player
new GetVideoAsyncTask(activity).execute(videoUrl);
}
});
if (videoGridView!=null) videoGridView.setAdapter(adapter);
}
GetVideoAsyncTask加载视频链接并在外部应用程序中输入Intent来传输该视频。为了做到这一点,在onLoading期间我设置了一个ProgressDialog,向用户显示一条加载消息。加载完成后,意图启动。
问题 当显示ProgressDialog并且用户单击“后退按钮”时,对话框将被取消,但是asynctask继续工作。所以当它完成它启动意图。 我想阻止这个。我在MainActivity中有一个onPause方法,但我没有从适配器启动的GetVideoAsyncTask的引用。所以我不能调用方法AsyncTask.cancel(true)来拒绝意图启动。 有什么建议吗?
答案 0 :(得分:0)
创建异步任务类的对象;
TvAsyncTask tvTask = new TvAsyncTask(getActivity(), gridView, progressBar);
tvTask.execute();
然后在TvAsyncTask类中覆盖onCanceled函数
@Override
protected void onCancelled()
{
super.onCancelled();
}
在后退按钮代码中检查:
if(tvTask != null)
tvTask.cancel(true);
答案 1 :(得分:0)
在主要活动中,您可以保留对GetVideoAsyncTask
和TvAsyncTask
的引用,并在onPause中取消它们。
不活动:
GetVideoAsyncTask getVideoAsyncTask;
TvAsyncTask tvAsyncTask;
在onCreate中:
tvAsyncTask=new TvAsyncTask(getActivity(), gridView, progressBar);
tvAsyncTask.execute();
和onItemClick
getVideoAsyncTask=new GetVideoAsyncTask(activity);
getVideoAsyncTask.execute(videoUrl);
onPause中的:
if(tvAsyncTask!=null&&!tvAsyncTask.isCancelled())
tvAsyncTask.cancel(true);
if(getVideoAsyncTask!=null&&!getVideoAsyncTask.isCancelled())
getVideoAsyncTask.cancel(true);