06月12, 2014

Android中AyncTask线程终止问题

在线程中执行任务时,特别是在线程中批量处理任务或其他耗时较长的任务,且执行任务时,当前activity被loading框阻塞。这种情况下,有时需要没有执行完任务,人为的手动终止任务(不想等待执行)。

比如,我在写一个测试工具时,需要处理批量的URL是否可访问,访问是否成功。这个批量的访问处理就是在线程中执行的(网络请求需在线程中执行,且批量的数据在线程中执行不会造成UI线程长时间无响应而ANR)。但批量访问毕竟需要时间等待结束,所以没有耐心的就想人为的结束。

要中断线程执行时,可以通过在线程中设置标识(boolean型)来判断线程的运行和结束。在doInBackground(Params…)方法中标识为可运行的就运行,当为中断标识时就停止,且放在循环里可以循环检测中断标识。特别是在线程执行时,有加载框ProgressDialog阻塞,通过捕获back键中断,不能直接在 AsyncTask中处理捕获back键事件来处理,而是通过ProgressDialog的setOnCancelListener()响应事件来调用AsyncTask中中断线程的方法。

pdProgressDialogialog.setCancelable(true);
pdProgressDialogialog.setOnCancelListener(new OnCancelListener() {
    @Override
    public void onCancel(DialogInterface dialog) {
        // TODO Auto-generated method stub
        httpexcuteExcuteHttp.setBreak();
    }
});
///而    AsyncTask中通过标识判断来 实现
class ExcuteHttp extends AsyncTask<Void, Integer, String> {
........
@Override
protected String doInBackground(Void... params) {
.......
for (xxx; xxx&!stopflaghttp;xxx) {
}
}
//设置标识
public void setBreak() {
// TODO Auto-generated method stub
stopflaghttp=true;
}

本文链接:http://blogs.360.cn/post/android中aynctask线程终止问题.html

-- EOF --

Comments