android下载学习和handler
来源:互联网 发布:手机修图软件 编辑:程序博客网 时间:2024/06/04 01:33
这几天一直在学习android使用Asynctast(HttpURLConnection),DownLoadManager进行下载。
1.HttpURLConnection:这种方式使用了java jdk网络编程原理,实际上只是建立了一个与服务器的tcp连接,并没有实际发送http请求,无论是post还是get,http请求实际上直到HttpURLConnection的getInputStream()这个函数里面才正式发送出去。在用POST方式发送URL请求时,URL请求参数的设定顺序是重中之重,对connection对象的一切配置(那一堆set函数)都必须要在connect()函数执行之前完成。而对outputStream的写操作,又必须要在inputStream的读操作之前。这些顺序实际上是由http请求的格式决定的。
通过设置点击事件启动一个new MyAsyncTask().execute(FILE_PATH);然后
public class MyAsyncTask extends AsyncTask<String, Integer, byte[]> {
@Override
protected void onPreExecute() {
super.onPreExecute();
//启动之前的设置
}
@Override
protected byte[] doInBackground(String... params) {
// 通过Apache的HttpClient来访问请求网络中的一张图片
return image;//返回数据的byte
}
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
// 更新ProgressDialog的进度条
progressDialog.setProgress(values[0]);//因为上面返回了一个byte数组,系统类对其进行了封装转为int数组
}
// 下载完在此处进行操作
@Override
protected void onPostExecute(byte[] result) {
super.onPostExecute(result);
// 将doInBackground方法返回的byte[]解码成要给Bitmap
Bitmap bitmap = BitmapFactory.decodeByteArray(result, 0, result.length);
// 更新我们的ImageView控件
imageView.setImageBitmap(bitmap);//如果下载的是图片
// 使ProgressDialog框消失
progressDialog.dismiss();
progressDialog.setProgress(0);
}
}
2.DownLoadManager:刚开始一直不知道怎么使用这个方法去进行回调,对进度条进行操作,后面自己找资料(百度、书),终于实现了
downloadObserver = new DownloadChangeObserver(null);
getContentResolver().registerContentObserver(CONTENT_URI, true, downloadObserver);//这里的两句是在onCreate这个方法里面写的,
上面的这个方法我查了资料,说是接口监视数据的变更,我的理解就是通过这个来监视数据的变化,通过DownloadChangeObserver里面的方法进行回调。
然后点击下载的时候发handler,在handler中downId = downManager.enqueue(request);然后在回调方法中对数据进行查找,将数据的变化set进progressbar,通过这几天的学习,对handler的理解有加深了 一步。
不难看出,handler是主线程上一个串通的消息机制,主线程中可以通过开启子线程做复杂的操作,当操作完成后,发送handler消息,当handler捕获到的时候,通过这个消息的类型进行相应的操作,因为handler是和主线程绑定的,那么在handler中就可以Toast显示一些消息,并且能够对ui进行简单的操作,如果在子线程中对ui进行操作,会报错的。
哪里有什么问题,希望大家指出。
- android下载学习和handler
- Android学习--handler和handlerThread
- Study-android 的handler和message学习
- Android-handler.post和handlemessage的使用对比(下载图片)
- android多线程学习---Android Looper和Handler分析
- Android Handler学习一
- Android 之 handler 学习
- android 学习 Handler
- Android之Handler学习
- android handler 学习
- android Handler 学习
- Android:Handler学习总结
- Android Handler学习总结
- Android Handler学习
- Android Handler学习笔记
- Android学习之handler
- android handler学习笔记
- Android中Handler学习
- window下配置SSH连接GitHub、GitHub配置ssh key
- 第一次上机作业(2)
- Wifi启动流程分析
- 第2周项目2 就拿胖子说事
- 第一次实验项目3-2
- android下载学习和handler
- 【项目异常】nested exception is java.lang.NoClassDefFoundError: org/aspectj/util
- VC提示msedv.exe 错误
- 在 swift中处理网络请求
- xxxxxxx
- txt文件转成bin文件shell脚本
- ARC下OC对象使用assign和使用weak的区别
- 第二周项目2-就拿胖子说事
- android 用GridView加载Bitmap 内存溢出问题总结