1.Android主线程如何向分线程发送消息
因为你是在主线程创建的handler实例,比如你是这样实例化handler 那么我们进到handler源码看一下 可以看到这里会调用重载的另外一个构造方法,我们再跟进 我们可以看到 mLooper=looper.myLooper(); 这是获取当前线程的looper实例,也就是主线程的looper。
所以当发送消息的时候主线程就可以获取到消息。往下看系统还会mLooper是否为空,如果为空就会抛出异常,意思是当前线程没有looper实例,这也是我们在子线程中没有创建looper的实例的时候创建handler会报错的原因,主线程不会报错是因为程序在启动的时候在activitythread中的main方法就创建了looper实例,看系统源码 然后调用looper.loop();就开始了消息循环。
这就是为什么在主线程发消息住线程还能收到消息的原因。因为发送消息的实例是在主线程实例化的就有了主线程的looper。
2.android中怎么区分UI主线程和子线程
在一个Android 程序开始运行的时候,会单独启动一个Process。默认的情况下,所有这个程序中的Activity或者Service(Service和 Activity只是Android提供的Components中的两种,除此之外还有Content Provider和Broadcast Receiver)都会跑在这个Process。
一个Android 程序默认情况下也只有一个Process,但一个Process下却可以有许多个Thread。在这么多Thread当中,有一个Thread,我们称之为UI Thread。UI Thread在Android程序运行的时候就被创建,是一个Process当中的主线程Main Thread,主要是负责控制UI界面的显示、更新和控件交互。在Android程序创建之初,一个Process呈现的是单线程模型,所有的任务都在一个线程中运行。因此,我们认为,UI Thread所执行的每一个函数,所花费的时间都应该是越短越好。而其他比较费时的工作(访问网络,下载数据,查询数据库等),都应该交由子线程去执行,以免阻塞主线程。
那么,UI Thread如何和其他Thread一起工作呢?常用方法是:
诞生一个主线程的Handler物件,当做Listener去让子线程能将讯息Push到主线程的Message Quene里,以便触发主线程的handlerMessage()函数,让主线程知道子线程的状态,并在主线程更新UI。
3.如何为android添加新的线程
new Thread(new Runnable(){
public void run(){
//TODO
//在这里写要处理的操作,子线程中不能处理UI的操作(如:textView.setText("cc");),否则报错
}
}
).start();
这样就开了新的线程了。
线程可以结合Handler来使用,需要获取线程内部的消息,可以使用Handler将消息发送到UI主线程中。
4.android的按钮如何启动一个线程
Handler handler = new Handler();
Runnable updateThread = new Runnable() {
public void run() {
//里边写要实现的方法
}
};
写个按钮的监听,里边加 handler.post(updateThread);
移除线程则加handler.removeCallbacks(updateThread);
转载请注明出处育才学习网 » android怎么写分线程