为了账号安全,请及时绑定邮箱和手机立即绑定

如果要在第一个加载图片的例子中取消线程,应该怎么做呢?

如果要在第一个加载图片的例子中取消线程,应该怎么做呢?怎么试都没成功。。。

正在回答

3 回答

@Override
protected void onPause() {
   super.onPause();
   if (task!=null&&task.getStatus()==AsyncTask.Status.RUNNING){
       task.cancel(true);
   }

}


@Override
protected void onPreExecute() {
   if (isCancelled()){
       return;
   }
   super.onPreExecute();
   progressBar.setVisibility(View.VISIBLE);
}


在预处理的时候判断一下AsyncTask状态就可以了

0 回复 有任何疑惑可以回复我~
#1

Bingo_ang 提问者

好的,谢谢!但是我在doInBcakground里面加也实现了,你看看有问题吗?就是注释有一串“!”那一行
2016-06-07 回复 有任何疑惑可以回复我~
#2

Bingo_ang 提问者

非常感谢!
2016-06-08 回复 有任何疑惑可以回复我~

你的isCancelled()方法又不是在一个循环里面或者回调监听可以随时影响将流转换为bitmap,所以肯定不行,也就是说你取消按钮还没按,已经走过了你的isCancelled()判断方法了

0 回复 有任何疑惑可以回复我~
#1

Bingo_ang 提问者

但是在真机中跑确实能达到效果。不过我觉得按逻辑来还是放在预处理中判断比较合理。
2016-06-08 回复 有任何疑惑可以回复我~
#2

FINE_Android 回复 Bingo_ang 提问者

嗯,一般大的文件才会明显的感觉到进度的走动,然后在更新的方法中进行一般判断就可以了,知道怎么处理就行
2016-06-08 回复 有任何疑惑可以回复我~
@Override
  protected Bitmap doInBackground(String... params) {
   // 获取传递进来的参数: 因为只传进一张图片,所以只用取出数组params的第0位内容
   String url = params[0];
   Bitmap bitmap = null;
   URLConnection connection;// 定义网络连接对象
   InputStream is;// 用于获取数据的输入流对象
   // 将URL解析成bitmap对象(此为耗时操作,所以在doInBackground中)
   try {
    // 将url传进去,获取网络连接对象
    connection = new URL(url).openConnection();
    // 获取输入流接对象
    is = connection.getInputStream();
    // 将输入流is放到缓存器中
    BufferedInputStream bis = new BufferedInputStream(is);
    Thread.sleep(9000);// 人为阻碍加载
    // 一旦监测到cancel,则立即返回
    if (isCancelled()) {
     Log.v("ang", "杀死");
     return null;// !!!!!!!!!!!!!!!!!!!
    }
    Log.v("ang", "没有跳过");
    // 将bis传入,通过decodeStream把输入流解析成bitmap
    bitmap = BitmapFactory.decodeStream(bis);
    // 关闭输入流
    is.close();
    bis.close();
   } catch (MalformedURLException e) {
    e.printStackTrace();
   } catch (IOException e) {
    e.printStackTrace();
   }
   return bitmap;// 返回的是解析得到的bitmap对象
  }


0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Android必学-AsyncTask基础
  • 参与学习       40912    人
  • 解答问题       99    个

了解Android中AsyncTask的使用方法,掌握异步线程的使用

进入课程

如果要在第一个加载图片的例子中取消线程,应该怎么做呢?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信