`
lovnet
  • 浏览: 6710933 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

AsyncTask activity异步线程

 
阅读更多

AsyncTask activity异步线程 解释:
最近使用AsyncTask很是郁闷,(其实郁闷的原因是个人原因,太疏忽了)不过,如果你不知道这个类那就更是郁闷了
应用场景:我最近从网上看到好多人求异步加载图片的方法,yes,它可以实现,的用男他,哈哈,很爷们的类,我主要是开发短信模块的时候,需要头部先加载,列表短信后加载,放置开启软件会出现黑屏等待,不都为了用户么,哈哈
当然你会说,扯蛋吧,开个Thread不就行了,那你就从activity里面开发线程管理一下它的显示我看看
废话不说了,讲解一下AsyncTask,当然我的理解肯定会有错误的地方
AsyncTask<Params, Progress, Result>:
一:三个参数是做什么的?
params:Params, the type of the parameters sent to the task upon execution.
简单的说就是你传进去的参数,是,在你调用AsyncTask的execute时传
Progress:Progress, the type of the progress units published during the background computation.
过程参数
Result, the type of the result of the background computation.
返回参数,就是你开启一个后台线程想处理得到的返回值

二:
例子
api本身的例子
private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
protected Long doInBackground(URL... urls) {
int count = urls.length;
long totalSize = 0;
for (int i = 0; i < count; i++) {
totalSize += Downloader.downloadFile(urls[i]);
publishProgress((int) ((i / (float) count) * 100));
}
return totalSize;
}

protected void onProgressUpdate(Integer... progress) {
setProgressPercent(progress[0]);
}

protected void onPostExecute(Long result) {
showDialog("Downloaded " + result + " bytes");
}
}
new DownloadFilesTask().execute(url1, url2, url3);
URL就为传进去的参数,Integer过程处理参数,后台线程Long返回参数
三:说说他几个方法的含义
1。onPreExecute(), invoked on the UI thread immediately after the task is executed. This step is normally used to setup the task, for instance by showing a progress bar in the user interface.
大体就是你可以拿它来做初始化,最开始执行的参数
2.doInBackground(Params...), invoked on the background thread immediately after onPreExecute() finishes executing. This step is used to perform background computation that can take a long time. The parameters of the asynchronous task are passed to this step. The result of the computation must be returned by this step and will be passed back to the last step. This step can also use publishProgress(Progress...) to publish one or more units of progress. These values are published on the UI thread, in the onProgressUpdate(Progress...) step.
当然这个是最重要的参数。
注意:你想开启线程就是要异步处理,这里面放你最浪费时间的事物,当然记住,这是后台线程,不属于UI,所以不能对你的界面进行操作,比如更改显示,切忌只能用来处理麻烦的不控制前台东西
我的应用,在这里获取的数据库数据,因为一般也就数据查询匹配耗时,我测试一般访问一次数据库耗时50到150毫秒

3.onProgressUpdate(Progress...), invoked on the UI thread after a call to publishProgress(Progress...). The timing of the execution is undefined. This method is used to display any form of progress in the user interface while the background computation is still executing. For instance, it can be used to animate a progress bar or show logs in a text field.
就不解释了,这个可以进行做一些触发的提示
4.onPostExecute(Result), invoked on the UI thread after the background computation finishes. The result of the background computation is passed to this step as a parameter.
这个也很重要,我一般的用法是:得到doInBackground处理后的数据,当然就是Result,然后这里进行页面更改
5.execute
只能调用一次

四:误区
如果你把你非常耗时的操作放进onPostExecute,在模拟器上跑也会感觉实现了异步效果,但是我要告诉你你这样做是错误的。
我的理解:(下面存属个人理解,80%可能是错的,哈哈)
模拟器:迷你器会在UI线程同一资源管理器中开启一个并发线程,所以,这里的所有方法都是并发于UI的线程,也就doInBackground无足轻重
真机:但是你要放在真机上,前5次也会得到你想要的和模拟器上一样的效果,但是第六次乃至以后就没有异步效果了,估计它就只能开五个,以后的和UI属于同一线程了,所以你就只能靠doInBackground了
当然这个理解,我也感觉比较扯蛋,哈哈,有时间研究一下源码

分享到:
评论

相关推荐

    Android中显示在标题上的进度条

    Android中显示在标题上的进度条,里面用到了AsyncTask异步线程类

    浅谈Android中使用异步线程更新UI视图的几种方法

    activity提供的一个轻量级更新ui的方法,在Fragment需要使用的时候要用getActivity.runOnUiThread开启线程 这种方法最简单,方便更新一些不需要判断的通知,比如在聊天项目中动态获取未读消息数量。 ...

    Android 使用AsyncTask 后监听异步加载完毕的动作

    AsyncTask的使用方法网上有很多例子,使用起来也非常的方便。...场景模拟当我们在加载一个列表的时候,比如GridView,这时候我们考虑到不阻塞UI的做法,一般会使用线程Thread、Timer或者使用AsyncTask。

    Android中的多线程问题

    目录一:问题的提出二:使用Handler处理多线程问题三:使用AsyncTask(异步任务)处理多线程问题 一:问题的提出 Android用户界面是与用户交互的接口,对于用户的操作,Android迅速响应用户的输入是一个重要目标。如果...

    Android 中糟糕的AsyncTask

    AsyncTask是一个很常用的API,尤其异步处理数据并将数据应用到视图的操作场合。其实AsyncTask并不是那么好,甚至有些糟糕。本文我会讲AsyncTask会引起哪些问题,如何修复这些问题,并且关于AsyncTask的一些替代方案...

    Android用HandlerThread模拟AsyncTask功能(ThreadTask)

     AsyncTask是个好东西,能处理绝大多数应用线程和更新UI的任务,由于其内部使用了静态线程池,如果你有一堆异步任务(例如全局定时更新数据、同一个Activity中多个AsyncTask同时执行)其中有不能马上执行完的情况...

    详解android进行异步更新UI的四种方式

    使用AsyncTask异步任务; 使用runOnUiThread(action)方法; 使用Handler的post(Runnabel r)方法; 下面分别使用四种方式来更新一个TextView。 1.使用Handler消息传递机制 package ...

    Android 3.0引入的异步加载机制Loader

    Loader是谷歌在Android 3.0引入的异步加载机制,能够对数据异步加载并显示到Activity或Fragment上,使用者不需要对数据的生命周期进行管理,而是交给Loader机制来管理。 使用Loader的优点 假如我们需要从网络上获取...

    TaskExecutor:TaskExecutor是健壮,统一和集中式异步Task执行框架的实现。 任务将保留在磁盘上,以适应configurationChanges,创建新的Activity,甚至在进程终止后都可以生存。 通过许多选项,几乎可以保证您的任务可以执行,并通过硬回调直接回发到当前活动

    我见过太多项目,其中AsyncTask和线程通常是在没有考虑的情况下完成的。 我什至看过匿名的AyncTask实现:( TaskExecutor将所有异步活动整合到一个ExecutorService中,可以通过一个唯一查询的服务在所有Activity应用...

    Android中AsyncTask详细介绍

    AsyncTask是一个很常用的API,尤其异步处理数据并将数据应用到视图的操作场合。其实AsyncTask并不是那么好,甚至有些糟糕。本文我会讲AsyncTask会引起哪些问题,如何修复这些问题,并且关于AsyncTask的一些替代方案...

    Android异步接口测试

    现在项目的异步接口访问都遵循一个特定的访问模式:前台的Activity获取到触发事件后将接受到的参数传给一个异步任务,这些任务大都是AsyncTask的实现——即启动一个新的线程访问后台接口数据,完毕后调用回调函

    加强版异步任务框架

    笔者以AsyncTask为范本,写了一个“加强版的异步任务框架”:保留了AsyncTask的所有用法,解决了其中的一些问题,同时引入了一些新特性。接下来给大家介绍一下这“加强版”的框架,希望对各位有所启发。AsyncTask的...

    详解android异步更新UI的几种方法

    为了不阻塞ui线程,我们时常会开启一个新的线程(工作线程)来执行这些耗时操作,然后我们可能需要将查询到的数据渲染到ui组件上,那么这个时候我们就需要考虑异步更新ui的问题了。 android中有下列几种异步更新ui的...

    Android集成测试

    他们都遵循一个特定的访问模式:前台的Activity获取到触发事件后,将它传给这些接口,这些接口都是AsyncTask的实现——即后台异步线程执行某个任务(一般是发送http请求到后端服务或者执行存取数据库等耗时操作),...

    Android网络音乐播放器 源码下载

    异步任务AsyncTask执行耗时任务-音乐的收藏(使用到数据库)操作及音乐的搜索等需要访问网络的操作; 自定义view实现圆形专辑图片,滚动歌词,支持下拉刷新的音乐列表; Json解析网络响应,正则表达式解析歌词; ...

    Android知识点及重要代码合集 word文档

    7.8 掌握AsyncTask异步任务下载网络资源 70 7.9 DatePickerDialog、TimePickerDialog的使用 76 8.1 ListView、SimpleAdapter和ArrayAdapter的使用 78 8.2 自定义适配器及BaseAdapter 83 8.3 ListView的缓存原理 85 ...

    android知识大总结【邯院】

    3. AsyncTask异步处理任务 15 4. 音频播放 20 8. 视频播放 26 9. 使用摄像头拍照 32 10. 视频录制 39 11. 国际化 43 12. 样式和主题 46 13. 编码实现软件界面 49 14. 标签页(选项卡) 51 15. 用HTML实现网页界面 57...

    android-tinyasync:Android 活动中半同步半异步方法的最小演示

    任何直接与服务器通信的应用程序都必须在单独的线程中执行此操作,通常使用 AsyncTask。 关于如何做到这一点有很多困惑,还有很多不同的方法。 一些开发人员甚至围绕事件驱动的框架(如 RX And​​roid)重新设计...

    老罗android开发视频教程全集百度网盘下载

    LoaderManager异步加载、多线程(AsyncTask与Handler)、 百度地图等十五个模块,一共102集。 本网盘分享章节编号是按照视频更新的先后顺序编号的,具体学习可参考如下章节顺序: 【第一版第一章】老罗Android...

Global site tag (gtag.js) - Google Analytics