玛丽外宿中歌曲,翻译行业,铁道警官高等专科学校分数线
android 的线程和线程池
从用途上分,线程分为主线程和子线程;主线程主要处理和界面相关的事情,子线程则往往用于耗时操作。
主线程和子线程
主线程是指进程所拥有的线程。android 中主线程交 ui 线程,主要作用是运行四大组件以及处理它们和用户的交互;子线程的作业则是执行耗时任务。
android 中的线程形态
1、asynctask asynctask 是一种轻量级的异步任务类,可以在线程池中执行后台任务,然后把执行的进度和最终结果传递给主线程并在主线程中更新 ui, asynctask 是一个抽象的泛型类,提供了 params(参数的类型)、progress(后台任务执行进度的类型) 和 result(后台任务的返回结果的类型) 这三个泛型参数, asynctask 提供了4个核心方法
onpreexcute 先执行,接着是 doinbackground,最后才是 onpostexecute。 当异步任务被取消时,oncancelled() 方法会被调用,这个时候 onpostexecute 则不会被调用。
2、asynctask 在具体的使用过程中的一些限制条件
3、asynctask 的工作原理 asynctask 中有两个线程池(serialexecutor 和 thread_pool_executor) 和一个 handler(internalhandler),线程池 serialexecutor 用于任务的排队,线程池 thread_pool_executor 用于真正地执行任务,internalhandler 用于将执行环境从线程池切换到主线程。
4、handlerthread handlerthread 继承了 thread,是一种可以使用 handler 的 thread, 它的实现就是在 run 方法中通过 looper.prepare() 来创建消息队列,并通过 looper.loop() 来开启消息循环。
与普通的 thread 相比,普通 thread 主要用于在 run 方法中执行一个耗时任务,而 handlerthread 在内部创建了消息队列,外界需要通过 handler 的消息方式来通知 handlerthread 执行一个具体的任务。
由于 handlerthread 的 run 方法是一个无限循环,因此当明确不需要在使用 handlerthread 时,可以通过它的 quit 或者 quitsafely 方法来终止线程的执行。
5、intentservice intentservice 是一种特殊的 service,继承了 service 并且是一个抽象类,必须创建它的子类才能使用 intentservice。intentservice可用于执行后台耗时任务,任务执行后会自动停止,并且它的优先级比单纯的线程要高很多,不容易被系统杀死。在实现上,intentservice 封装了 handlerthread 和 handler。
android 中的线程池
线程池的优点
threadpoolexecutor threadpoolexecutor 是线程的真正实现。
public threadpoolexecutor(int corepoolsize, int maximumpoolsize, long keepalivetime, timeunit unit, blockingqueue<runnable> workqueue, threadfactory threadfactory)
threadpoolexecutor 执行任务时遵循的规则
线程池的分类
系统预置4种线程池的典型使用方法:
runnable command = new runnable(){ @override public void run(){ systemclock.sleep(2000); } executorservice fixedthreadpool = executors.newfixedthreadpool(4); fixedthreadpool.execute(command); executorservice cachedthreadpool =executors.newcachedthreadpool(); cachedthreadpool.execute(command); scheduledexecutorservice scheduledthreadpool = executors.newscheduledthreadpool(4); // 2000ms 后执行 command scheduledthreadpool.schedule(command,2000,timeunit.milliseconds); // 延迟10ms,每个1000ms执行一次 command scheduledthreadpool.scheduleatfixedrate(command,10,1000,timeunit.milliseconds); executorservice singlethreadexecutor = executors.newsinglethreadexecutor(); singlethreadexecutor.execute(command); }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Android studio开发小型对话机器人app(实例代码)
Android通过Java sdk的方式接入OpenCv的方法
Android 通过cmake的方式接入opencv的方法步骤
Android Studio finish()方法的使用与解决app点击“返回”(直接退出)
Android 进度条 ProgressBar的实现代码(隐藏、出现、加载进度)
网友评论