• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Android开发艺术探索学习笔记(十一),android艺术探索

Android开发艺术探索学习笔记(十一),android艺术探索

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了Android开发艺术探索学习笔记(十一),android艺术探索等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Android开发艺术探索学习笔记(十一),android艺术探索


第十一章  Android的线程和线程池

  从用途上来说,线程分为子线程和主线程,主线程主要处理和界面相关的事情,而子线程往往用于执行耗时的操作。AsyncTask,IntentService,HandlerThread都可以扮演线程的角色。

  AsyncTask封装了线程池和Handler,主要是为了方便开发者在主线程中更新UI。

  HandlerThread是一种具有消息循环的线程,在它的内部可以使用Handler。

  IntentService是一个服务,系统对其进行了封装,使其可以更方便的执行后台任务,IntentService内部采用了HandlerThread来执行任务,当任务执行完毕后IntentService会自动退出,由于其优先级较高,不容易被系统杀死。

  11.1 主线程和子线程

  主线程-处理界面交互相关的逻辑,运行四大组件以及处理它们和用户的交互。

  子线程-执行耗时的任务,比如网络请求,IO操作等。(3.0开始网络访问不能在主线程中,否则NetworkOnMainThreadException)

  11.2 Android中的线程形态

    11.2.1 AsyncTask

    一种轻量级的异步任务类,在线城池中执行后台任务,然后把执行的君度和最终的结果传递给主线程并在主线程中更新 UI,不建议用于执行特别耗时的任务。

    类声明如下:

public abstract class AsyncTask<Params,Progress,Result>

 

     Params:参数类型;

    Progress:后台任务执行进度类型;

    Result:后台任务的返回结果类型。

    以上参数如果不需要传递可以用Void代替。

    四个核心方法:

    (1)onPreExecute()——初始化的准备工作,主线程中执行;

    (2)doInBackground(Params...params)——执行异步任务,线程池中执行,执行过程中通过publishProgress方法更新任务进度,publishProgress方法会触发onProgressUpdate();

    (3)onProgressUpdate(Progress...values)——更新任务进度,主线程中执行。

    (4)onPostExecute(Result result)——异步任务返回结果,主线程执行。

    注意:...在java中表示参数不固定,数组型参数。

    执行异步任务通过以下方法:

new MyAsyncTask().execute(url1,url2,url3);

     AsyncTask使用的限制条件:

    (1)AsyncTask的类必须在主线程中加载(默认);

    (2)AsyncTask对象必须在主线程中创建;

    (3)execute方法必须在主线程中调用;

    (4)不要直接调用四种核心方法;

    (5)一个AsyncTask对象只能执行一次,即只能调用一次execute方法,否则会报运行时异常。

    11.2.3 HandlerThread

    HandlerThread继承自Thread,是一种可以使用handler 的Thread,具体使用场景是IntentService。

    11.2.4 IntentService

    IntentService一种特殊的Service,封装了HandlerThread和Handler,用于执行后台耗时的任务,任务执行后会自动停止;比较适合执行一些高优先级的后台任务。

  11.3 Android中的线程池

  线程池的优点:

  (1)重用线程池中的线程可减少性能开销;

  (2)能有效控制线程池的最大并发数,避免大量线程之间因互相抢占系统资源而导致的阻塞现象。

  (3)能够对线程进行简单的管理,提供定时执行以及指定间隔循环执行等功能。

  Android 中的线程池都是直接或者间接通过配置ThreadPoolExecute来实现的。

  11.3.1 ThreadPoolExecute

  线程池的构造方法:

public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TileUnit unit,BlockingQueue<Runnable> workQueue,THreadFactory threadFactory)

  corePoolSize:核心线程数;

  maximumPoolSize:最大线程数;

  keepAliveTime:非核心线程闲置时的超时时长;

  unit:keepAliveTime的时间单位,如TimeUnit.MILLISECONDS(毫秒),TimeUnit.SECONDS(秒),TimeUnit.MINUTES(分钟)

  workQueue:线程池中的任务队列。

  threadFactory:线程工厂,用于为线程池创建新线程。

  11.3.2 线程池的分类

  (1)FixedThreadPool——只有核心线程;

  (2)CachedThreadPool——只有非核心线程,适合执行大量的耗时较少的任务;

  (3)ScheduledThreadPool——核心线程数量固定,非核心线程数量无限制,用于执行定时任务和具有固定周期的重复任务;

  (4)SingleThreadExecutor——只有一个核心线程,解决线程同步问题。

 

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Android开发艺术探索学习笔记(十一),android艺术探索

相关文章

  • 2017-05-26Android UI学习笔记 之 使用ViewPager实现导航
  • 2017-05-26Android仿联系人列表分组悬浮列表实现,自定义PinnedHeaderListView实现
  • 2017-05-26解决VS2017不连接visual studio emulator for android,vs2017android
  • 2017-05-26android四大组件之Broadcast,androidbroadcast
  • 2017-05-26Android5.0开发范例大全 读书笔记(四),android5.0范例
  • 2017-05-26android学习第一天(android的介绍和基础):,android第一天
  • 2017-05-26「视频直播技术详解」系列之六:现代播放器原理,
  • 2017-05-26Andriod中自定义Dialog样式的Activity点击空白处隐藏软件盘(Dialog不消失),andrioddialog
  • 2017-05-26Android--音乐播放器
  • 2017-05-26Android开发技术周报 Issue#67

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Android 系统常用的权限,android权限
    • Android 博客园客户端 (五) 查看评论、搜索博主,android查看评论
    • 分布式协议Paxos学习笔记
    • android:获取手机号码和姓名实现通讯录
    • Android 如何有效的解决内存泄漏的问题,android泄漏
    • android四大组件之Broadcast,androidbroadcast
    • Android在onCreate()方法中可以获取到宽高等信息
    • Android 之 Intent(意图),androidintent意图
    • 关于Android滑动冲突的解决方法(二)
    • android测试工具MonkeyRunner--google官网翻译

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有