一、实现多线程

1.创建线程

(1)通过Thread创建线程

Thread thread = new Thread(new Runnable(){

@Override

public void run() {

// TODO Auto-generated method stub

}

});

(2)通过实现Runnable()接口创建线程

public class MainActivity extends Activity implements Runnable{

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

@Override

public void run() {

// TODO Auto-generated method stub

}

}

2.线程的开启

thread.start();

3.线程的休眠

Thread.sleep(1000);//休眠1秒

4.中断线程

public class MainActivity extends Activity implements Runnable{

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

LooperThread thread = new LooperThread();

thread.start();

thread.interrupt();

}

@Override

public void run() {

// TODO Auto-generated method stub

while(!Thread.currentThread().isInterrupted()){

// do something

}

}

}

二、Handler消息传递机制

前面介绍了现成的用法,不过不能在新建的子线程中对UI进行修改。如果要操作,会报错Only the original thread that created a view hierarchy can touch its views。为此,Android引入Handler消息传递机制,来实现在线程中操作UI界面。

1.循环者(Looper)简介

在Android中,一个线程对应一个Looper对象,一个Looper对象对应一个MessageQueue(消息队列)。MessageQueue用于存放message。在MessageQueue中,存放的消息按照FIFO原则执行。

Looper对象用来为线程开启一个消息循环,从而操作MessageQueue。默认情况下,系统自动为主线程创建Looper对象,开启消息循环。所以,在主线程中用下面的代码创建Handler对象不会出错,而在非主线程中则会报错。

Handler handler = new Handler();

如果想在非主线程中创建Handler对象,必须用到Looper:

public class LooperThread extends Thread {

public Handler h;

@Override

public void run() {

// TODO Auto-generated method stub

super.run();

Looper.prepare(); //

h = new Handler(){

@Override

public void handleMessage(Message msg) {

// TODO Auto-generated method stub

Log.i("Looper", String.valueOf(msg.what));

}

};

Message m = h.obtainMessage();

m.what = 0x11;

h.sendMessage(m);

Looper.loop();

}

}

2.消息处理类(Handler)简介

Handler主要有以下两个作用:

(1)将Message或Runnable应用post()或sendMessage()方法发送到MessageQueue中,发送时可以指定延迟时间或者绑定的Bundle数据。当MessageQueue循环到该Message时,调用handlerMessage()方法对其处理。

(2)在子线程与主线程进行通信,也就是在工作线程中与UI进行通信

3.消息类(Message)简介

Message具有如下5个属性

1.arg1 int 用来存放整型数据

2.arg2 int 用来存放整型数据

3.obj Object用来存放发送给接收器的Object类型的任意对象

4.replyTo Messenger用来指定该Message该发往何处

5.what int 用户自定义消息代码

在使用时,需要注意以下3点:

1.通常使用Message.obtain()或Handler.obtainMessage()获取空消息对象,以节省资源

2.如果一个Message只需要携带简单的int信息,优先使用arg1和arg2来传递,这比Bundle节省内存

3.尽可能用Message.what来标识信息

android中开启线程处理,Android线程与消息处理相关推荐

  1. android中开启wifi,打开android系统设置,连接wifi

    打开android系统设置,连接wifi wifi信号强度:得到的值是一个0到-100的区间值,是一个int型数据,其中0到-50表示信号最好,-50到-70表示信号偏差,小于-70表示最差,有可能连 ...

  2. 在Android中使用Handler和Thread线程执行后台操作

    在 Android中使用Handler和Thread线程执行后台操作 对于线程的控制,我们将介绍一个 Handler类,使用该类可以对运行在不同线程中的多个任务进行排队,并使用Message和Runn ...

  3. java线程画动图闪,Android中利用画图类和线程画出闪烁的心形,android心形,package com....

    Android中利用画图类和线程画出闪烁的心形,android心形,package com.package com.tt.view;import android.content.Context;imp ...

  4. android 开启子线程方法,android中开启子线程

    AndroidRuntime(673): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example/ ...

  5. android 中开启线程的方法,android中开启的循环线程

    拉莫斯之舞 你可以使用 RetrantLockprivate final ReentrantLock lock = new ReentrantLock(); if(toModify[j]==1) { ...

  6. Android开发——Android中常见的4种线程池(保证你能看懂并理解)

    0.前言 转载请注明出处:http://blog.csdn.net/seu_calvin/article/details/52415337 使用线程池可以给我们带来很多好处,首先通过线程池中线程的重用 ...

  7. Android中常见的4种线程池的理解(转)

    转:https://blog.csdn.net/l540675759/article/details/62230562 转:https://blog.csdn.net/seu_calvin/artic ...

  8. android中多线程与ui,Android UI线程和非UI线程

    UI线程及Android的单线程模型原则 当应用启动,系统会创建一个主线程. 这个主线程负责向UI组件分发事件(包括绘制事件),也是在这个主线程里,你的应用和Android的UI组件发生交互. 所以主 ...

  9. Android中Activity、Service和线程之间的通信

    Activity.Service和线程应该是Android编程中最常见的几种类了,几乎大多数应用程序都会涉及到这几个类的编程,自然而然的,也就会涉及到三者之间的相互通信,本文就试图简单地介绍一下这三者 ...

最新文章

  1. hibernate教程--常用配置和核心API详解
  2. 关于mobile中datagrid的使用
  3. java barrier_Java并发类CyclicBarrier方法详解
  4. XML 语法速查笔记
  5. MUI下拉导航组件 - 应用篇
  6. 【干货】2020年研发运营安全白皮书.pdf(附下载链接)
  7. 《每个设计师都应该掌握的50个css代码段》11~20段
  8. 虚树(bzoj 3572: [Hnoi2014]世界树)
  9. matlab2c使用c++实现matlab函数系列教程-rot90函数
  10. 《我是一只IT小小鸟》读书笔记
  11. 迅雷mac版精简教程
  12. 微信H5开发wx.config授权invalid signature
  13. 图片去水印工具(Teorex Inpaint) v7.1
  14. R语言--Cox模型校准曲线原理(一)数据来源
  15. Dagger2 依赖注入框架介绍
  16. Reactor 反应堆
  17. 使用Windows10搭建服务器 ——一次虚拟机实验记录
  18. 2022-01-27 使用liquibase管理mysql执行版本
  19. 面向嵌入式开发的C++中间件库
  20. 【算法】_003_代码版式

热门文章

  1. SAP Spartacus baseSite设置的源头 - 路由事件
  2. SAP Spartacus core fromOccBaseSites逻辑
  3. jsp项目手动导出成war包
  4. Gradle中依赖任务产生的不同输出
  5. SAP Commerce的extensioninfo.xml
  6. how is view embedded via component usage being initialized
  7. create document history via code
  8. role menu for SAP_UI2_ADMIN_700
  9. SAP UI5 OData Json model name
  10. how can a model method trigger binding value refreshed