Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 4+;上未取消异步任务;(第2.3节工程)_Android_Android Asynctask - Fatal编程技术网

Android 4+;上未取消异步任务;(第2.3节工程)

Android 4+;上未取消异步任务;(第2.3节工程),android,android-asynctask,Android,Android Asynctask,我的处境和这里一样: 我设置了一个计时器,在几秒钟后终止异步任务。 它在安卓2.3.5上运行良好(任务在我设置的超时后被取消),但由于某些原因,它在安卓4+上无法运行) 这是相关代码(都在AsyncTask类中) 私有类TaskKiller扩展了TimerTask{ 专用异步任务mTask; 公共TaskKiller(异步任务){ mTask=任务; } 公开募捐{ mTask.cancel(true); } } @凌驾 受保护的字符串doInBackground(无效…无){ //设置任务超时

我的处境和这里一样:

我设置了一个计时器,在几秒钟后终止异步任务。 它在安卓2.3.5上运行良好(任务在我设置的超时后被取消),但由于某些原因,它在安卓4+上无法运行)

这是相关代码(都在AsyncTask类中)

私有类TaskKiller扩展了TimerTask{
专用异步任务mTask;
公共TaskKiller(异步任务){
mTask=任务;
}
公开募捐{
mTask.cancel(true);
}
}
@凌驾
受保护的字符串doInBackground(无效…无){
//设置任务超时。
定时器=新定时器();
时间表(新TaskKiller(本),3000);
response=HttpRequest(url);//此方法发出HttpPost请求。
//我认为,这就是安卓4+无法取消任务的地方(在发出http请求时)。不过,它在2.3.5中被完全取消了。
}
@凌驾
受保护的void onCancelled(){
Log.e(“任务已取消”和“…”);
}
在安卓2.3中,它就像一个魅力


关于如何在安卓4+中工作,您有什么线索吗?

尝试在取消任务后放置中断。。检查一下这可能是个好主意。我没有想到如果。不幸的是,eclipse显示了一个错误,并要求我向mRequest“添加强制转换”(它添加了一个计时器强制转换!)。所以到目前为止,它还不起作用。我将测试类似的方法并返回。解决方案很简单。我不得不使用mRequest.abort(),而不是“mRequest.cancel()”,而且它起了作用。感谢这个简单而明亮的解决方案。
private HttpUriRequest mRequest;


protected String doInBackground(Void... nothing) {
    ...
    mRequest = new HttpGet(url); // or HttpPost
    response = client.execute(mRequest);
    ...
}

private void myCancelationRoutine() {
      mRequest.cancel();
      mTask.cancel();
}
private HttpUriRequest mRequest;


protected String doInBackground(Void... nothing) {
    ...
    mRequest = new HttpGet(url); // or HttpPost
    response = client.execute(mRequest);
    ...
}

private void myCancelationRoutine() {
      mRequest.cancel();
      mTask.cancel();
}