|
|
发表于 2016-9-6 18:22:27
|未经授权,严禁转载,违者必究...
|
|阅读模式
进阶 多线程 开辟 下载器 高级 android 多线程下载器 多线程下载器 基于qt的多线程下载器 java多线程下载器 多线程文件下载器 城通网盘下载器高级版 java多线程高级编程 java多线程简单实例 多线程高级编程
每个Android应用在被启动时城市建立一个线程,这个线程称为主线程或UI线程,Android应用的所有操作城市运行在这个线程中。可是为了包管UI的流利性,凡是会将耗时操作放到子线程中,例如IO操作、收集请求等。而几乎每个Android应用城市涉及到收集请求等耗时操作,所以多线程对于Android来说变得至关主要。
这里经由过程实现一个简单的下载器来进修Thread和Runnable。
这个下载器就一个界面,包含一个输入框,一个进度条,用来显示下载进度,用来输入下载地址,一个按钮,用来最先下载。
细心的人可能会留意到这里的按钮用了一个布景@drawable/btn_style,这里是自界说按钮的外形。代码如下:btn_style.xml
接下来就是下载操作了,代码如下:MainActivity.java
经由过程Handler把子线程中的message发送到主线程,并在handleMessage中更新进度条。当Progress=100时,弹出Toast提醒下载完成。
AsyncTask合用于简单的异步处置,不需要借助线程和Handler即可实现。
利用AsyncTask的步调:
这里经由过程实现一个简单的下载器来进修AsyncTask。
细心的人可能会留意到这里的按钮用了一个布景@drawable/button_style,这里是自界说按钮的外形。代码如下:button_style.xml
界面写完了,实现下载代码,按照上面的步调,第一步是实现AsyncTask的子类,代码如下:DownloadAsyncTask.java
这里在onPreExecute()方式中实现了初始化并显示进度对话框,在doBackground()方式经由过程读文件、写文件完成下载使命,并挪用publishProgress()方式发出更新进度,在onProgressUpdate()方式中执行更新进度,在onPostExecute()方式中销毁进度条对话框,并弹出Toast提醒下载完成。
上一步实现了AsyncTask的子类,这一步就需要建立该子类的实例,并执行execute()最先执行使命。
短处:
[ol]每次都需要new Thread,新建对象机能差。线程缺乏同一治理,可能无限制新建线程,彼此之间竞争,极可能占用过多系统资本导致死机或OOM。缺乏更多功能,如按时执行、按期执行、线程中止。
[/ol]
ThreadPoolExecutor——线程池(多线程的治理者)
引入的益处:
[ol]晋升机能,建立和耗损对象费时费CPU资本。防止内存过度耗损,节制勾当线程的数目,防止并发线程过多。
[/ol]
线程池的分类:
[ol]new CachedThreadPool:建立一个可缓存线程池,假如线程池长度跨越处置需要,可矫捷收受接管余暇线程,若无可收受接管,则新建线程。new FixedThreadPool:建立一个定长线程池,可节制线程最年夜并发数,超出的线程会在队列中期待。new ScheduledThreadPool:建立一个定长线程池,撑持按时及周期性使命执行。new SingleThreadPool:建立一个单线程化线程池,它只会用独一的工作线程来执行使命,包管所有的使命按照指定挨次(FIFO、LIFO、优先级)执行。
[/ol]
|
|