导图社区 主线程UI、AsyncTask编程开发知识点
主线程UI AsyncTask编程开发的构思维导图包括主线程UI,AsyncTask,下载网络图片等知识点,对软件开发感兴趣的小伙伴可以下载收藏。
网店详情页排版方法分享~包括中心页面组成,优质详情必备,详情页的排版参考方法。感兴趣的小伙伴可以看看哦~
喷绘色彩基础培训方案,内容涵盖色彩基础,喷绘写真。框架清晰,内容丰富,希望对小伙伴有所帮助哦~
酒窖营销计划方案,包括结果目标,过程目标。框架清晰,内容丰富,有需要的小伙伴可以看看哦~ 可供大家参考,借鉴,交流。
社区模板帮助中心,点此进入>>
互联网9大思维
安全教育的重要性
组织架构-单商户商城webAPP 思维导图。
个人日常活动安排思维导图
域控上线
西游记主要人物性格分析
17种头脑风暴法
python思维导图
css
CSS
主线程UI、AsyncTask编程开发知识点
主线程UI
两条规则
不要阻塞UI线程
否则超过5s有出现ANR
Application Not Responding
不要在非UI线程中更新UI
直接报错
处理:Main Thread、Worker Thread通信问题
Handler的机制
AsyncTask 机制
将主线程请到子线程家
Thread:run{ thread:}
AsyncLoader
AsyncTask
理解
多线程编程的一个框架
异步的任务在后台
耗时的操作
结果返回UI线程来更新UI控件
使用步骤
定义类来继承AsyncTask抽象类
实现其唯一的doInBackgroud 抽象方法
3个泛型,4个步骤。
class MyAsyncTask extends AsyncTask <Params, Progress, Result>
Params
传递给异步任务执行时的参数的类型
doInBackground(String... params)
new MyAsyncTask().execute(path);
启动目标子线程
Progress/Integer
异步任务在执行的时候将执行的进度返回给UI线程的参数的类型
onProgressUpdate(Integer... values)
this.publishProgress(i)
Result
异步任务执行完后返回给UI线程的结果的类型
doInBackground(String... params)返回值
onPostExecute(Long result)形参result的数据类型.
执行异步任务步骤
onPreExecute()
UI Thread当中执行的
初始化的操作
如弹出要给ProgressDialog
progressDialog.show();
doInBackground(Params... params)
worker thread当中执行
执行结果发送给我们的最后一个 onPostExecute 方法
this.publishProgress(i);
获取数据等一些耗时的操作
onProgressUpdate(Progess... values):
UI Thread当中执行
更新我们的进度。
doInBackground 方法中调用一个 publishProgress(Progress) 传递更新
progressDialog.setProgress(values[0]);
onPostExecute(Result... result):
任务执行完之后,就会将结果返回给这个方法
UI Thread当中调用
Toast.makeText(getApplicationContext(), "文件大小="+result, Toast.LENGTH_LONG).show();
progressDialog.dismiss();
注意
Cancelling a Task
取消我们的异步任务的执行
doInBackgroud() 方法执行完之后
isCancelled()
遵循的原则
AsyncTask类必须在UI Thread当中加载
Android Jelly_Bean版本后这些都是自动完成的
自动调用四个方法
AsyncTask任务只能被执行一次
下载网络图片
声明
imageView_img
progressDialog
设置progressDialog
/启动异步任务
downLoad()
String path="http://www.baidu.com/img/bd_logo1.png";
MyAsyncTask
class MyAsyncTask extends AsyncTask<String, Integer, byte[]>{
protected void onPreExecute() {
//显示进度对话框
protected byte[] doInBackground(String... params) {
//1.实例化URL对象
URL url=new URL(params[0]);
//2.得到HttpURLConnection对象
URLConnection urlConnection= url.openConnection();
HttpURLConnection httpURLConnection=(HttpURLConnection) urlConnection;
//3.设置相关属性
httpURLConnection.setConnectTimeout(3000);//设置连接超时时间
httpURLConnection.setRequestMethod("GET");//设置提交方式
//4.将请求提交到服务器端并得到服务器端返回的结果
int responseCode=httpURLConnection.getResponseCode();
if(responseCode==200){
//得到文件的大小
int fileSize=httpURLConnection.getContentLength();
//得到输入流对象
InputStream inputStream=httpURLConnection.getInputStream();
//实例化字节数组输出流对象
ByteArrayOutputStream byteArrayOutputStream=new ByteArrayOutputStream();
byte[] buffer=new byte[1024];
int len=-1;
int current_len=0;
//用来存储当前进度值
while((len=inputStream.read(buffer))!=-1){
current_len+=len;
int values=(int)(current_len/(float)fileSize*100);
publishProgress(values);
byteArrayOutputStream.write(buffer, 0, len);
SystemClock.sleep(100);
//模拟耗时操作
return byteArrayOutputStream.toByteArray();
//得到字节数组输出流对应的字节数组
protected void onProgressUpdate(Integer... values)
onPostExecute(byte[] result)
将字节数组转化成位图对象的方式
if(result!=null){
Bitmap bitmap=BitmapFactory.decodeByteArray(result,0,result.length);
imageView_img.setImageBitmap(bitmap);
}else{
Toast.makeText(getApplicationContext(), "获取网络数据失败!", Toast.LENGTH_LONG).show();