Android多线程
来源:互联网 发布:导弹拦截 CSDN C语言 编辑:程序博客网 时间:2024/06/06 02:27
Java提供了线程类Thread来创建多线程的程序。其实,创建线程与创建普通的类的对象的操作是一样的,而线程就是Thread类或其子类的实例对象。每个Thread对象描述了一个单独的线程。要产生一个线程,有两种方法:
1.需要从Java.lang.Thread类派生一个新的线程类,重载它的run()方法;
2.实现Runnalbe接口,重载Runnalbe接口中的run()方法。
当我们启动一个App的时候,Android系统会启动一个Linux Process,该Process包含一个Thread,称为UI Thread或Main Thread。通常一个应用的所有组件都运行在这一个Process中,当然,你可以通过修改四大组件在Manifest.xml中的代码块(<activity><service><provider><receiver>)中的android:process属性指定其运行在不同的process中。当一个组件在启动的时候,如果该process已经存在了,那么该组件就直接通过这个process被启动起来,并且运行在这个process的UI Thread中。
Android提供了四种常用的操作多线程的方式,分别是:
1. Handler+Thread2. AsyncTask3. ThreadPoolExecutor4. IntentService
Handler+Thread
Android主线程包含一个消息队列(MessageQueue),该消息队列里面可以存入一系列的Message或Runnable对象。通过一个Handler你可以往这个消息队列发送Message或者Runnable对象,并且处理这些对象。每次你新创建一个Handle对象,它会绑定于创建它的线程(也就是UI线程)以及该线程的消息队列,从这时起,这个handler就会开始把Message或Runnable对象传递到消息队列中,并在它们出队列的时候执行它们。
Handler可以把一个Message对象或者Runnable对象压入到消息队列中,进而在UI线程中获取Message或者执行Runnable对象,Handler把压入消息队列有两类方式,Post和sendMessage:
Post方式:
Post允许把一个Runnable对象入队到消息队列中。它的方法有:
post(Runnable)/postAtTime(Runnable,long)/postDelayed(Runnable,long)
对于Handler的Post方式来说,它会传递一个Runnable对象到消息队列中,在这个Runnable对象中,重写run()方法。一般在这个run()方法中写入需要在UI线程上的操作。
线程对象创建后,并不会马上自动运行,而是需要通过调用线程的start()方法来启动线程。
当新建一个Thread对象后,线程的状态为New,此时线程尚未开始运行。通过调用start()方法来启动线程。
线程运行过程中,遇到阻塞事件不能运行时会进入Blocked状态,当阻塞解除后,线程回到Runnable状态等待下一次运行 。
其余thread类的方法:
start(),run(),sleep(),join(),yield(),isAlive(),wait(),notify(),notifyAll()。
每个Android程序启动时,都会创建一个进程,同时在进程中创建一个主线程。
AsyncTask类是Android提供的一个轻量级的基于多线程的进行后台异步工作处理的类。
- Android 多线程
- Android多线程
- Android 多线程
- Android 多线程
- Android 多线程
- Android多线程
- android 多线程
- android多线程
- android 多线程
- Android多线程
- android 多线程
- android多线程
- Android多线程
- android 多线程
- Android多线程
- Android 多线程
- android 多线程
- Android多线程
- 让VIM彻底告别乱码
- 【集训】jzoj 2017.7.8 noip模拟赛A 总结
- 背包问题
- jsp页面input的value中的值含英文双引号处理方法
- jzoj. 3452. 【NOIP2013中秋节模拟】长方形(rectangle)
- Android多线程
- Thinkphp导出Excel表格
- centos安装并启动tomcat
- Python的坑(8) -- 闭包
- Python学习—Python虚拟环境(pyvenv、virtualenv)
- JavaScript获取DOM元素位置和尺寸大小
- button设置倒计时
- 田字格布局
- nodejs之yield 和 yield*