Android 取消正在执行的任务
当我登录到我的应用程序时,一个异步任务开始执行,当该任务正在执行且我注销应用程序时,该任务仍在运行,并在一段时间后给出结果(尽管我已注销)。我想问,有没有办法取消那个任务,这样它就不会给我结果Android 取消正在执行的任务,android,android-asynctask,Android,Android Asynctask,当我登录到我的应用程序时,一个异步任务开始执行,当该任务正在执行且我注销应用程序时,该任务仍在运行,并在一段时间后给出结果(尽管我已注销)。我想问,有没有办法取消那个任务,这样它就不会给我结果 class AsyncClass extends AsyncTask<>{ @Override protected String doInBackground(Void... params) { if(isCancelled())
class AsyncClass extends AsyncTask<>{
@Override
protected String doInBackground(Void... params)
{
if(isCancelled())
{
Log.d("isCancelled", iscancelled());
}
//call the webservice
}
}
但是,iscancelled()
中的Log语句永远不会被调用。是的,这是可能的
YourAsyncTask mTask;
if(mTask!=null) mTask.cancel();
谢谢是的,这是可能的
YourAsyncTask mTask;
if(mTask!=null) mTask.cancel();
谢谢是的,您可以使用取消异步任务。您可以创建AsyncTask类的实例并调用
if(task != null && task.equals(AsyncTask.Status.RUNNING))
task.cancel(true);
是,您可以使用取消异步任务。您可以创建AsyncTask类的实例并调用
if(task != null && task.equals(AsyncTask.Status.RUNNING))
task.cancel(true);
根据此使用任务。取消(true);和被取消()
私有类更新库扩展异步任务{
private ProgressDialog=新建ProgressDialog(Library.this);
private int total=Library.instance.appState.getAvailableText().length;
私有整数计数=0;
//当按下后退按钮时,用作取消任务的处理程序
私有异步任务updateTask=null;
@凌驾
受保护的void onPreExecute(){
updateTask=this;
设置ProgressStyle(ProgressDialog.STYLE_水平);
dialog.setOnDismissListener(新的OnDismissListener(){
@凌驾
公共void onDismiss(对话框接口对话框){
updateTask.cancel(true);
}
});
setMessage(“更新库…”);
dialog.setMax(总计);
dialog.show();
}
@凌驾
受保护的布尔doInBackground(无效…arg0){
对于(int i=0;i
根据此使用任务。取消(true);和被取消()
私有类更新库扩展异步任务{
private ProgressDialog=新建ProgressDialog(Library.this);
private int total=Library.instance.appState.getAvailableText().length;
私有整数计数=0;
//当按下后退按钮时,用作取消任务的处理程序
私有异步任务updateTask=null;
@凌驾
受保护的void onPreExecute(){
updateTask=this;
设置ProgressStyle(ProgressDialog.STYLE_水平);
dialog.setOnDismissListener(新的OnDismissListener(){
@凌驾
公共void onDismiss(对话框接口对话框){
updateTask.cancel(true);
}
});
setMessage(“更新库…”);
dialog.setMax(总计);
dialog.show();
}
@凌驾
受保护的布尔doInBackground(无效…arg0){
对于(int i=0;i
就在一天前,我遇到了同样的问题:)
其他三个答案的混合对我来说很有用
首先在字段上声明asyncTask:
private MyTaskClass miTask;
在onCreate/onResume上,如果活动:
miTask = new MyTaskClass();
然后您可以用任何方法执行它
miTask.execute();
在“暂停/停止”中:
miTask.cancel(true);
只有在doInBackground中选中isCancelled(),这才有效,我为游标访问创建了一个示例,如果片段被取消,游标访问已经关闭:
@Override
protected Void doInBackground(Void... params) {
cached = true;
int idIndex = currentCursor.getColumnIndex(Contacts._ID);
int displayNameIndex = currentCursor
.getColumnIndex(Contacts.DISPLAY_NAME);
while (currentCursor.moveToNext()) {
if (isCancelled()) {
break;
}
希望对你有所帮助,问候你。
亚历克斯我一天前也有同样的问题:) 其他三个答案的混合对我来说很有用 首先在字段上声明asyncTask:
private MyTaskClass miTask;
在onCreate/onResume上,如果活动:
miTask = new MyTaskClass();
然后您可以用任何方法执行它
miTask.execute();
在“暂停/停止”中:
miTask.cancel(true);
只有在doInBackground中选中isCancelled(),这才有效,我为游标访问创建了一个示例,如果片段被取消,游标访问已经关闭:
@Override
protected Void doInBackground(Void... params) {
cached = true;
int idIndex = currentCursor.getColumnIndex(Contacts._ID);
int displayNameIndex = currentCursor
.getColumnIndex(Contacts.DISPLAY_NAME);
while (currentCursor.moveToNext()) {
if (isCancelled()) {
break;
}
希望对你有所帮助,问候你。
亚历克斯检查。我同意Lalit的回答,发生的是,我从web服务获取数据。同时有6个自动售货机正在运行。问题是当first async任务开始执行并注销时,当我使用不同的用户登录时,第一个asyntask不会再次执行。这有意义吗?检查。我同意Lalit的回答,发生的是,我从web服务获取数据。同时有6个自动售货机正在运行。问题是当first async任务开始执行并注销时,当我使用不同的用户登录时,第一个asyntask不会再次执行。这有意义吗?它永远不会被取消()。可能是什么问题?isCancelled()总是返回false:(抱歉,我不能…。但我可以通过伪代码向您显示发生了什么。检查我的编辑它永远不会被isCancelled()。可能是什么问题?isCancelled()总是返回false:(抱歉,我不能…。但我可以通过伪代码向您显示发生了什么。检查我的编辑