首页 > 其他分享 >android实现多线程基础

android实现多线程基础

时间:2023-03-27 19:33:50浏览次数:36  
标签:Thread 创建 基础 Handler 线程 msg new 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);

  // 当调用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

相关文章

  • Android开发 1_触控事件分发_触控在framework层上的注册
    前言此篇博客基于Android10版本,将讲解触控在系统层上的注册。Android的触控事件分发与其他事件分发来对比的话,可以说是很不一样的。如果你阅读此篇博客想去了解在fram......
  • 【git基础】git创建空白分支
    前言 [email protected]:rrr/traffic_light_detection.gitcdtraffic_light_detectiongitbranch-agitcheckout--orphannewbranchgitrm-rf......
  • 【python基础】eval的使用
    前言开发的时候,遇到一个标注的json文件中多边形的框的表示,一时忘记不知道如何解析,此处主要使用eval函数,故记录之。json文件多边形框的描述"result":[{......
  • #Python基础 利用Pyinstaller 模块对python代码进行打包exe
    一般我们都用 Python 的 Pyinstaller 模块进行打包,这里记录Pyinstaller 模块进行打包。一:安装 Pyinstaller 模块pipinstallPyInstaller二:打开cmd(win+R) ......
  • 多线程中常见的成员方法
     MyThreadt=newMyThread();1、StringgetName()细节:如果没有给线程设置名字,线程也是有默认的名字的格式:Thread-X(X序号,从0开始)2、voidsetName(Stringname)细......
  • Java基础必须会的!
    由于此文章是从本人笔记上截取,可能存在格式不正确的情况,尚且谅解,另外把一些链接也放了进去,还请大家仔细看。面向对象概念?(1)概述:面向对象是相对于面向过程而言的,面向过程强......
  • Google+ Android版本更新绚丽界面 支持手机Hangout群聊
    继 Google+ 升级iOS版本之后,Android版本也进行了重大更新,增加了Hangout 视频聊天功能;新的Google+ Android 2.6版本也拥有了与iOS版同样炫目的界面。现在用户可......
  • iOS版本迭代加速,Android 4.0用户亦愈发活跃
    从最近一份友盟的数据报告中可以看出,苹果用户对苹果设备和固件更新的追捧热情仍然很高,在iOS5.1在更新后的两个月就已占有iOS全部版本的50%的份额。同样截至六月底TheNewi......
  • Android TextView部分文字(超链接/Span)点击事件、变色、去除下划线
    马上8月结束了,深海决定写点东西分享给大家,祝各位程序猿身体健康万事如意.废话不多说,直接上图:如图中蓝色文字的效果,需求如下:1,点击跳转到另一个页面2.去除下划线3.颜色......
  • Android 视频列表(RecyclerView)实现自动播放
    最近公司出了新的需求,想让视频列表滑到哪里,哪里就自动播放.于是乎,深海开始动手了:第一步,先让视频可以手动点击播放这个简单:就往ViewHolder里放一个视频播放器就可以了......