Android 多线程基础
需要注意几个概念:Runnable,Thread,Handler。
1. Runnable只是一个接口,里面包含run()函数。所以Runnable本身不会开启线程。
2. Thread实现Runnable接口,并创建新的线程。
创新线程有两种方式:
- 创建一个类,继承Thread,重写run()函数。用start()方法运行。
Xxx extends Thread...
- 创建一个类,继承Runnable,重写run(),把这个类放在一个Thread里,然后调用Thread的start()方法运行。
Xxx implements Runnable...
Xxx x = new Xxx();
new Thread(x).start();
第二种方法好处是:
- Runnable是接口,可以多重继承,而如果继承Thread则只能继承一个。
- 资源可以共享。比如经典的多线程卖票,创建三个继承自Thread的类卖票,结果是各卖各的票,最后卖出了三倍于最高票数的票。但如果三个Thread使用的是同一个继承自Runnable的类的实例,资源就可以实现共享,最终卖出的票数等于最高票数。
3. Handler:一个Handler允许发送和处理Message或者Runnable对象,并且会关联到主线程的MessageQueue中。
就是说Handler应该与一个线程相对应,可以发送消息,然后在主线程(UI线程)中处理消息。
简单来说,就是Handler基本就是用来给线程更新UI的。
Handler有一个post方法,它会传递一个Runnable对象到消息队列中,在这个Runnable对象中,重写run()方法。一般在这个run()方法中写入需要在UI线程上的操作。
handler.post(new Runnable() {...
需要注意的是,post里面的Runnable的run()方法是运行于UI线程上的。所以不可以用来访问网络等耗时操作,否则会报错。相反如果在子线程中进行更新UI操作也会报错。
参考文章:
Android开发:Handler Runnable和Thread之间的区别和联系 应用--------------------看完本篇,从此一览无余!
Android 多线程基础的更多相关文章
- android: 多线程编程基础
9.1 服务是什么 服务(Service)是 Android 中实现程序后台运行的解决方案,它非常适合用于去执行那 些不需要和用户交互而且还要求长期运行的任务.服务的运行不依赖于任何用户界面,即使 ...
- android程序---->android多线程下载(一)
多线程下载是加快下载速度的一种方式,通过开启多个线程去执行一个任务,可以使任务的执行速度变快.多线程的任务下载时常都会使用得到断点续传下载,就是我们在一次下载未结束时退出下载,第二次下载时会接着第一次 ...
- Android多线程(三)
上次讲了关于Android多线程中通信中Thread.Handler.Looper等的基础概念和基本用法,用现实世界两个人写信交流的过程来理解是再好不过了.但是不得不说这一套完整的细节的确很繁琐,好在 ...
- <转>Android多线程总结
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://yuchen.blog.51cto.com/2739238/593019 --An ...
- Android测试基础题(三)
今天接着给大家带来的是Android测试基础题(三). 需求:定义一个排序的方法,根据用户传入的double类型数组进行排序,并返回排序后的数组 俗话说的好:温故而知新,可以为师矣 packag ...
- android 多线程
本章讲述在android开发中,多线程的应用.多线程能够处理耗时的操作并优化程序的性能.本章主要介绍知识点,AsyncTask,Java线程池,ThreadPoolExecutor线程池类.本章案例只 ...
- Java基础知识笔记(四:多线程基础及生命周期)
一.多线程基础 编写线程程序主要是构造线程类.构造线程类的方式主要有两种,一种是通过构造类java.lang.Thread的子类,另一种是通过构造方法实现接口java.lang.Runnable的类. ...
- Java多线程干货系列—(一)Java多线程基础
前言 多线程并发编程是Java编程中重要的一块内容,也是面试重点覆盖区域,所以学好多线程并发编程对我们来说极其重要,下面跟我一起开启本次的学习之旅吧. 正文 线程与进程 1 线程:进程中负责程序执行的 ...
- JAVASE02-Unit010: 多线程基础 、 TCP通信
多线程基础 . TCP通信 * 当一个方法被synchronized修饰后,那么 * 该方法称为同步方法,即:多个线程不能同时 * 进入到方法内部执行. package day10; /** * 当多 ...
随机推荐
- 小米笔记本pro CPU GPU 做科学计算的算力对比
小米笔记本pro:15.6寸,i7-8850,16G,256G,GPU:MX150 测试对象Caffe,MNIST训练 使用纯CPU训练: 1.耗时:11分58秒 2.功耗:35W 使用GPU训练: ...
- open()打开文件失败对应的各种错误码
open()打开文件失败错误码: 获取错误信息实例: HANDLE hFile = ; hFile = open(“c:\test.txt”, O_RDWR, S_IRWXU|S_IRWXG|S_IR ...
- Eclipse安装Freemarker Editor插件
在下面网址里下载freemarker-ide: http://sourceforge.net/projects/freemarker-ide/files/ 下载完成后后解压,由于该IDE里面的free ...
- Thymeleaf 表达式工具类
Thymeleaf默认提供了丰富的表达式工具类,这里列举一些常用的工具类. Objects工具类 1 2 3 4 5 6 7 8 /* * 当obj不为空时,返回obj,否则返回default默认值 ...
- TensorMask
原文地址:https://arxiv.org/pdf/1903.12174.pdf 论文阅读:http://www.zhenzhujue.cn/article-36456-1.html https:/ ...
- 在 macOS 中激活 Astash Professional
Astah Professional v7.2.0-1ff236版安装完毕后,直接用压缩包内的 astah-pro.jar 替换原安装目录内的同名文件(/Applications/astah prof ...
- [Tools]SurveyMonkey
做问卷调查,推荐一个好工具,免费的 SurveyMonkey : it's free, quick & easy! https://www.surveymonkey.com/
- svn建立分支和svn代码合并的操作方法
首先说下为什么我们需要用到分支-合并.比如项目demo下有两个小组,svn下有一个trunk版.由于客户需求突然变化,导致项目需要做较大改动,此时项目组决定由小组1继续完成原来正进行到一半的工作[某个 ...
- Oracle学习笔记(十一)
例外: 例外是程序设计语言提供的一种功能,用来增强程序的健壮性和容错性. 例外分为:系统例外自定义例外 系统例外分为:No_data_found(没有找到数据).Too_many_rows(selec ...
- Java 高级基础——反射
Java 高级基础--反射 反射的意义:Java 强类型语言,但是我们在运行时有了解.修改信息的需求,包括类信息.成员信息以及数组信息. 基本类型与引用类型 基本类型,(固定的 8 种) 整数:byt ...