//创建线程类 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);// 当调用start()方法时,线程对象会自动回调线程辅助类对象的run(),从而实现线程操作
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();
标签:Thread,创建,基础,Handler,线程,msg,new,android,多线程 From: https://www.cnblogs.com/kun1790051360/p/17253241.html