原文地址:http://android.xsoftlab.net/training/multiple-threads/index.html

引言

大量的数据处理往往需要花费很长的时间,但如果将这些工作切分并行处理,那么它的速度与效率就会提升很多。在拥有多线程处理器的设备中,系统可以使线程并行运行。比如,使用多线程将图像文件切分解码展示要比单一线程解码快得多。

这章我内容们将会学习如何设置并使用多线程及线程池。我们还会学习如何在一个线程中运行代码以及如何使该线程与UI线程进行通信。

定义在线程中运行代码

这节课我们会学习如何实现Runnable接口,该接口中的run()方法会在线程中单独执行。你也可以将Runnable对象传递给一个Thread类。这种执行特定任务的Runnable对象在某些时候被称为任务

Thread类与Runnable类同属于基础类,它们仅提供了有限的功能。它们是比如HandlerThread, AsyncTask, 以及IntentService等线程功能类的基础核心。这两个类同样属于ThreadPoolExecutor的核心基础。ThreadPoolExecutor会自动管理线程以及任务队列,它甚至还可以使多个线程同时执行。

定义Runnable实现类

实现一个Runnable对象很简单:

public class PhotoDecodeRunnable implements Runnable {...@Overridepublic void run() {/** Code you want to run on the thread goes here*/...}...
}

实现run()方法

在Runnable的实现类中,Runnable的run()方法中所含的代码将会被执行。通常来说,Runnable中可以做任何事情。要记得,这里的Runnable不会运行在UI线程,所以在它内部不能直接修改View对象这种UI对象。如果要与UI线程通讯,你需要使用到Communicate with the UI Thread课程中所描述的技术。

在run()方法的开头处设置当前的线程使用后台优先级。这种方式可以减少Runnable对象所属线程与UI线程的资源争夺问题。

这里还将Runnable对象所属的线程引用存储了起来。由Thread.currentThread()可以获得当前的线程对象。

下面是代码的具体实现方式:

class PhotoDecodeRunnable implements Runnable {
.../** Defines the code to run for this task.*/@Overridepublic void run() {// Moves the current Thread into the backgroundandroid.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_BACKGROUND);.../** Stores the current Thread in the PhotoTask instance,* so that the instance* can interrupt the Thread.*/mPhotoTask.setImageDecodeThread(Thread.currentThread());...}
...
}

Android官方开发文档Training系列课程中文版:线程执行操作之定义线程执行代码相关推荐

  1. Android官方开发文档Training系列课程中文版:目录

    原文地址 : http://android.xsoftlab.net/training/index.html 引言 在翻译了一篇安卓的官方文档之后,我觉得应该做一件事情,就是把安卓的整篇训练课程全部翻 ...

  2. Android官方开发文档Training系列课程中文版:创建自定义View之View的创建

    原文地址:http://android.xsoftlab.net/training/custom-views/index.html 引言 Android框架含有大量的View类,这些类用来显示各式各样 ...

  3. Android官方开发文档Training系列课程中文版:OpenGL绘图之图形绘制

    原文地址:http://android.xsoftlab.net/training/graphics/opengl/draw.html 如果你还不清楚如何定义图形及坐标系统,请移步:Android官方 ...

  4. Android官方开发文档Training系列课程中文版:使用Fragment构建动态UI之Fragment创建

    原文地址:http://android.xsoftlab.net/training/basics/fragments/index.html 导言 为了在Android中创建动态的多面板用户界面,你需要 ...

  5. Android官方开发文档Training系列课程中文版:线程执行操作之创建多线程管理器

    原文地址:http://android.xsoftlab.net/training/multiple-threads/create-threadpool.html 上节课我们学习了如何定义一个任务.如 ...

  6. Android官方开发文档Training系列课程中文版:高效显示位图之管理位图内存

    原文地址:http://developer.android.com/training/displaying-bitmaps/manage-memory.html 除了在上一节中描述的步骤之外,还有一些 ...

  7. Android官方开发文档Training系列课程中文版:如何避免ANR?

    原文地址:http://android.xsoftlab.net/training/articles/perf-anr.html#anr 尽管你写代码可能通过了世界上所有的性能测试,但是它还是可能会让 ...

  8. Android官方开发文档Training系列课程中文版:线程执行操作之线程间通讯

    原文地址:http://android.xsoftlab.net/training/multiple-threads/communicate-ui.html 上节课我们学习了如何启动一项由Thread ...

  9. Android官方开发文档Training系列课程中文版:布局性能优化之ListView的优化

    原文地址:http://android.xsoftlab.net/training/improving-layouts/smooth-scrolling.html 想要让ListView滑动流畅的关键 ...

  10. Android官方开发文档Training系列课程中文版:数据存储之数据库存储

    原文地址:http://android.xsoftlab.net/training/basics/data-storage/databases.html 对于保存重复的结构化的数据最理想的方式就是存到 ...

最新文章

  1. 转载LINQ优点 自己学习用的
  2. 量子CNN不存在梯度消失问题,物理学家已完成理论证明
  3. 怎么跑都不累?自然医学揭秘微生物组提升运动表现
  4. 读书笔记《Hadoop开源云计算平台》
  5. android wear ios 连接,教你如何让Android Wear智能手表兼容iOS系统
  6. jq之$(“[href]“)
  7. macos 安装scala_如何在MacOS上安装Scala和Apache Spark
  8. git学习(二)查看log历史记录
  9. 软件外包,IT咨询和转型
  10. 几率大的多线程面试题(含答案)
  11. 链表初始化typedef struct LNode{}LNode,*linklist的理解
  12. QQ空间g_tk加密算法实现原理研究
  13. 从百度世界大会2014中所看到,所感受到的
  14. Npm配置全局安装插件目录以及命令用法扩展
  15. 有效年利率和年化百分比利率
  16. AD学习记录03-规则
  17. 九度-1008 最短路径
  18. 地下水分析测试项目与方法(无机部分)
  19. akka java api中文_akka入门 (1):akka简介
  20. Java并发编程之CAS第三篇-CAS的缺点

热门文章

  1. C语言typedefine 和define的区别
  2. python 对xlsx文件数根据日期进行统计分析_Python处理Excel的常用操作(一)
  3. matlab fftshift_数字信号处理没有Matlab?用Python一样很爽
  4. dedecms怎么改php版本_PHP程序员进阶之路
  5. xgboost分类_XGBoost(Extreme Gradient Boosting)
  6. 智慧交通day04-特定目标车辆追踪03:siamese在目标跟踪中的应用-SiamFC(2016)
  7. LeetCode DD-2020006. 简单游戏(前缀和)
  8. LeetCode 480. 滑动窗口中位数(大小堆升级版+set实现)
  9. 程序员面试金典 - 面试题 17.26. 稀疏相似度(哈希map)
  10. oss图片跨域问题_图片存储解决方案-阿里云对象存储