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管理对一个结构化的数据集合的访问.它们封装了数据,并且提供了保护数据安全性的 ...
 
随机推荐
- NSInvocation 返回值在ARC下面的释放问题
			
一.先看下面的代码 -(NSArray *) operationFromTakeoffAction:(NSString *) action AtPoint:(CGPoint) flightPoint ...
 - 《剑指offer3- 从末尾到头打印链表》
			
题目描述 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList. 本质上是逆转链表 /** * struct ListNode { * int val; * struct ListN ...
 - dhcp报错
			
报错详情 查看dhcpd.service状态 使用命令检查配置文件报错 dhcpd -t -cf /etc/dhcp/dhcpd.conf 修改配置文件 重启dhcpd服务 [root@servera ...
 - c#使用webView2 访问本地静态html资源跨域Cors问题 (附带代理服务helper帮助类)
			
背景 在浏览器中访问本地静态资源html网页时,可能会遇到跨域问题如图. 是因为浏览器默认启用了同源策略,即只允许加载与当前网页具有相同源(协议.域名和端口)的内容. WebView2默认情况下启用了 ...
 - asp.net上传Excel文件并读取内容,自定义上传控件样式
			
一.页面增加上传控件,并在上传时判断是否是Excel文件(根据后缀名判断): 1 <table> 2 <tr> 3 <td> 4 <span style=&q ...
 - Android开发基础——真机测试错误,ADB启动不了,程序安装不了,the connection to adb is down,INSTALL_CANCELED_BY_USER...
			
在Android开发中,无论是真机测试还是AVD测试,都会报出这些错误.在这里,我会详细说明一下怎么会出现这些错误的,然后要怎么样才能解决这些错误. 错误一: The connection to ad ...
 - python rabbitmq官方文档demo
			
1.生产者 #!/usr/bin/env python import pika import json # https://www.rabbitmq.com/tutorials/tutorial-on ...
 - Linux特殊权限之SBIT
			
简单点,说话的方式简单点: 用于修饰目录 其他用户x位替换成t 作用:目录属主在该目录下创建的文件只有该属主能删除
 - IPv6地址的文本表示规范
			
背景 随着IPv6越来越普及,经常要跟IPv6地址打交道,迫切需要一个统一的IPv6地址文本表示规范. RFC4291简单的说明了如何将IPv6地址表示成文本形式,但有很多有歧义和不周全的地方. RF ...
 - lumen、laravel 环境问题汇总
			
框架报500 1.chmod 777 -R storage 将日志目录权限设置下. 2.修改fastcgi,将代码目录包含进去. fastcgi_param PHP_ADMIN_VALUE " ...