android实现多线程基础
//创建线程类
class Mythread extends Thread{
@Override
public void run(){
//定义行为
}
}
//实例化线程类
MyThread mt=new MyThread(“线程名称”);
//// 此处采用 start()开启线程
mt.start();
//更加简便的匿名类,调用简单,但是不能复用
new Thread("线程名"){
@Override
public void run() {
}.start();
Thread与Runnable区别:多线程完成独自的任务与多线程共同完成任务
//注意:其实runnable创建的还是thread类
//实现了Runnable接口的类,称为 线程辅助类;Thread类才是真正的线程类
//创建线程辅助类
class Mythread implements Runnable{
@override
public void run(){ }
}
//实例化线程辅助类
MyThread mt=new MyThread();
//实例化线程类
//runnable接口没有对线程的支持,需要新建一个线程类,从内部运行runnable类
Thread td=new Thread(mt);
td.start();
//匿名类runnable
Runnable mt = new Runnable(){
@Override
public void run() {
}
}; Thread mt1 = new Thread(mt, "窗口1");
mt1.start();
Handler作用于:将子线程的信息传输到主线程上,实现异步消息处理问题
在主线程实现更新组件保证了安全性,因此在app中通过Handler提醒主线程更新组件
方法1:使用 Handler.sendMessage()
//新建Handler类(内部类)
class Myhandler extends Handler{
@Override
public void handleMessage(Message msg) {
// 需执行的UI操作
}
} //在主线中新建handler实例
private Handler mhandler = new mHandler(); //创建所需的消息对象
Message msg = Message.obtain(); // 实例化消息对象
msg.what = 1; // 消息标识
msg.obj = "AA"; // 消息内容存放 //通过Handler发送消息到消息队列
mHandler.sendMessage(msg);
//匿名内部类 //在主线程中创建handler实例
private Handler mhandler = new Handler(){
@Override
public void handleMessage(Message msg) {
...// 需执行的UI操作
}
}; //创建消息对象
Message msg = Message.obtain(); // 实例化消息对象
msg.what = 1; // 消息标识
msg.obj = "AA"; // 消息内容存放
//发送消息至消息队列中
mHandler.sendMessage(msg);
Handler.post()
// 步骤1:在主线程中创建Handler实例
private Handler mhandler = new mHandler(); // 步骤2:在工作线程中 发送消息到消息队列中 & 指定操作UI内容
// 需传入1个Runnable对象
mHandler.post(new Runnable() {
@Override
public void run() {
... // 需执行的UI操作
} }); // 步骤3:开启工作线程(同时启动了Handler)
Handler机制 中有3个重要的类:
- 处理器 类(Handler)
- 消息队列 类(MessageQueue)
- 循环器 类(Looper)
当创建Handler时会自动创建looper和messagequeue,保证了handler的对象与looper和messagequeue的关联
Looper的主要方法
1.Looper.prepareMainLooper();//为主线程创建一个循环器对象
2.Looper.prepare();//为子线程创建一个循环器对象————这两个方法同时都可以创建一个消息队列对象
主线程不需要创建looper对象,会自动生成;但是子线程若不创建looper对象,无法生成handler对象
当生成looper&messagequeue对象时会自动进入消息循环:Looper.loop();
android实现多线程基础的更多相关文章
- 13、Android的多线程与异步任务
课程目标:学习Android中异步操作的三大方式 重点难点:Handler与线程的关系 Handler消息队列的实现 考核目标: 使用Handler是异步的,它会建立新线程么? no Handle ...
- 2017 Android 面试题 [ 基础与细节 ]
2017 Android 面试题 [ 基础与细节 ] 感谢@chuyao抛出的这些问题,平时业务代码写多了,很多基础的东西变得含糊不清了,这次裸辞出来找工作确实没有之前顺利,顺便求上海Android开 ...
- Java基础知识笔记(四:多线程基础及生命周期)
一.多线程基础 编写线程程序主要是构造线程类.构造线程类的方式主要有两种,一种是通过构造类java.lang.Thread的子类,另一种是通过构造方法实现接口java.lang.Runnable的类. ...
- Java多线程干货系列—(一)Java多线程基础
前言 多线程并发编程是Java编程中重要的一块内容,也是面试重点覆盖区域,所以学好多线程并发编程对我们来说极其重要,下面跟我一起开启本次的学习之旅吧. 正文 线程与进程 1 线程:进程中负责程序执行的 ...
- JAVASE02-Unit010: 多线程基础 、 TCP通信
多线程基础 . TCP通信 * 当一个方法被synchronized修饰后,那么 * 该方法称为同步方法,即:多个线程不能同时 * 进入到方法内部执行. package day10; /** * 当多 ...
- JAVASE02-Unit09: 多线程基础
Unit09: 多线程基础 * 线程 * 线程用于并发执行多个任务.感官上像是"同时"执行 * * 创建线程有两种方式. * 方式一: * 继承线程并重写run方法来定义线程要执 ...
- java多线程基础
多线程基础 读书练习照猫画虎 package Threadtest; import java.util.Date; import java.util.concurrent.ArrayBlockingQ ...
- C#编程总结(二)多线程基础
C#编程总结(二)多线程基础 无论您是为具有单个处理器的计算机还是为具有多个处理器的计算机进行开发,您都希望应用程序为用户提供最好的响应性能,即使应用程序当前正在完成其他工作.要使应用程序能够快速响应 ...
- Android 触摸手势基础 官方文档概览
Android 触摸手势基础 官方文档概览 触摸手势检测基础 手势检测一般包含两个阶段: 1.获取touch事件数据 2.解析这些数据,看它们是否满足你的应用所支持的某种手势. 相关API: Moti ...
- Android Content Provider基础
Android Content Provider基础 Content Providers Content providers管理对一个结构化的数据集合的访问.它们封装了数据,并且提供了保护数据安全性的 ...
随机推荐
- 第一次至第三次PTAJava大作业分析
(1)前言: 三次题目集的知识点: 正则表达式(Regular Expression,简称Regex或RegExp)是一个强大的文本处理工具,用于匹配.查找和替换字符串.以下是正则表达式的主要知识点总 ...
- npm相关命令 npm 自定义脚本命令 自动重启应用
# 初始化生成package.json文件 npm init -y[不询问] # 查看本项目已安装模块 npm list # 安装模块 npm install 模块名[@版本号 可选] 或 npm ...
- The requested operation cannot be completed because the connection has been broken
具体报错 The requested operation cannot be completed because the connection has been broken. -- xxxForyy ...
- 解决 Error running ‘Application‘: Command line is too long.
一.项目场景:运行刚拉取下来的项目代码,出现下面问题描述的错误提示. 二.问题描述Error running 'Application': Command line is too long. Shor ...
- vue排行榜 加单位
- 搭建springboot redis项目
1.创建项目 如果出现init失败(需要等待网络可以正常连接) 或者运行主类的时候报错(错误: 找不到或无法加载主类),需要重新导入maven项目再重新编译试试. 2.引入pom jar <?x ...
- 『手写Mybatis』实现映射器的注册和使用
前言 如何面对复杂系统的设计? 我们可以把 Spring.MyBatis.Dubbo 这样的大型框架或者一些公司内部的较核心的项目,都可以称为复杂的系统. 这样的工程也不在是初学编程手里的玩具项目,没 ...
- navicat 15
新机经常需要安装navicat每次都要去网上搜很麻烦这次搜到了记录下来以后就不需要重复下载了 有X86和X64两个版本 破解说明在README文档中 下载地址:https://www.aliyundr ...
- UITableView的使用样例(简易向)
功能实现 构建一个UITableView,并使其默认显示a,b,c--.. 构建一个按钮,点击后列表变为英文字母 构建一个按钮,点击后列表变为数字 基本概念 实现前头文件需要签订协议(如何签订向后看) ...
- 用pm2命令管理你的node项目
文章目录 前言 安装 运行项目 pm2的命令 前言 我在服务器上运行node项目,使用命令nohup npm start &,结果关闭终端之后,进程就会停止,看来nohup也不是万能的后台运行 ...