用AsyncTask处理UI线程阻塞问题
2016-02-22 14:16
441 查看
如果有操作阻塞UI线程软件可能出现界面无响应错误,所以耗时操作不要放在UI线程中实现。
常用的解决方式是把这类网络操作,加载大文件等等耗时操作通过AsyncTask在后台线程中处理。
如何使用AsyncTask?
通过集成AsyncTask抽象类写一个自己的myAsyncTask类
private class MyTask extends AsyncTask<String, Integer, String>
三个泛型类型参数代表了“启动任务执行的参数”“后台任务和前台UI共享的参数”和“后台最后计算结果参数”,不一定要用,如果没有被用,可以用java.lang.Void类型代替。
使用时要重写的几个方法:
1.execute(Params... params),需要我们在代码中调用此方法触发执行异步任务。
2.onPreExecute(),在execute(Params... params)被调用后立即执行,般用来在执行后台任务前对UI做一些标记。
3.doInBackground(Params... params),在onPreExecute()成后立即执行,用于执行较为费时的操作,此方法将接收输入参数和返回计算结果。在执行过程中可以调用publishProgress(Progress... values)来更新进度信息。
4.onProgressUpdate(Progress... values),在调用publishProgress(Progress... values)时,此方法被执行,直接将进度信息更新到UI组件上。
5.onPostExecute(Result result),当后台操作结束时,此方法将会被调用,计算结果将做为参数传递到此方法中,直接将结果显示到UI组件上。
在使用的时候,有几点需要格外注意:
1. 异步任务的实例必须在UI线程中创建。
2. execute(Params... params)方法必须在UI线程中调用。
3. 不要手动调用onPreExecute(),doInBackground(Params... params),onProgressUpdate(Progress... values),onPostExecute(Result result)这几个方法。
4. 不能在 doInBackground(Params... params)中更改UI组件的信息。
5. 一个任务实例只能执行一次,如果执行第二次将会抛出异常。
基本摘录自点击打开链接
常用的解决方式是把这类网络操作,加载大文件等等耗时操作通过AsyncTask在后台线程中处理。
如何使用AsyncTask?
通过集成AsyncTask抽象类写一个自己的myAsyncTask类
private class MyTask extends AsyncTask<String, Integer, String>
三个泛型类型参数代表了“启动任务执行的参数”“后台任务和前台UI共享的参数”和“后台最后计算结果参数”,不一定要用,如果没有被用,可以用java.lang.Void类型代替。
使用时要重写的几个方法:
1.execute(Params... params),需要我们在代码中调用此方法触发执行异步任务。
2.onPreExecute(),在execute(Params... params)被调用后立即执行,般用来在执行后台任务前对UI做一些标记。
3.doInBackground(Params... params),在onPreExecute()成后立即执行,用于执行较为费时的操作,此方法将接收输入参数和返回计算结果。在执行过程中可以调用publishProgress(Progress... values)来更新进度信息。
4.onProgressUpdate(Progress... values),在调用publishProgress(Progress... values)时,此方法被执行,直接将进度信息更新到UI组件上。
5.onPostExecute(Result result),当后台操作结束时,此方法将会被调用,计算结果将做为参数传递到此方法中,直接将结果显示到UI组件上。
在使用的时候,有几点需要格外注意:
1. 异步任务的实例必须在UI线程中创建。
2. execute(Params... params)方法必须在UI线程中调用。
3. 不要手动调用onPreExecute(),doInBackground(Params... params),onProgressUpdate(Progress... values),onPostExecute(Result result)这几个方法。
4. 不能在 doInBackground(Params... params)中更改UI组件的信息。
5. 一个任务实例只能执行一次,如果执行第二次将会抛出异常。
基本摘录自点击打开链接
相关文章推荐
- mysqli_query 的定义和用法
- iOS中UITextView遇到的问题总结
- UIPickerView
- golang语法总结(十四):跳转语句goto、break、continue
- iOS UIImage渲染模式 imageWithRenderingMode:
- 使用 JIRA API 获取 Issue
- ui-router中使用$stateChangeStart来实现WEB用户登录跳转
- UISnapBehavior的简单使用
- [Android]android.util.AndroidRuntimeException: requestFeature() must be called before adding content
- 使用苹果自带的UIVideoEditController进行视频编辑
- iOS UIButton中的三个EdgeInsets属性
- [LeetCode] Count Univalue Subtrees 计数相同值子树的个数
- UWP应用开发系列视频教程简介 - Built for Windows 10
- Easyui 让Window弹出居中与最大化后居中
- Easyui 让DataGrid适应浏览器宽度
- UITableView编辑单元格多个按钮(4)
- 《深入理解SPARK:核心思想与源码分析》——SparkContext的初始化(仲篇)——SparkUI、环境变量及调度
- collectionview resueview 重影的问题
- 20.UIImageView之内容模式(contentMode)
- iOS - UIButton(UIEdgeInsets)/设置button上的文字和图片上下垂直居中对齐