Thread(线程)
Android 三种方式开启子线程
继承Thread
class MyThread extends Thread{
public void run(){
// 写耗时操作代码
// Only the original thread that created a view hierarchy can touch its views.
// 如果子线程已经执行了耗时操作,那么就不能修改视图的属性了;视图的属性只能在UI线程去修改
}
}
MyThread myThead = new MyThread();
myThread.start();
实现Runnable接口
class MyRunnable implements Runnable {
@Override
public void run() {
try {
Thread.sleep(3000);
String result = "runnable 345345";
Log.i("runnable", result);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
MyRunnable myRunnable = new MyRunnable();
Thread thread = new Thread(myRunnable);
thread.start();
Thread和Runnable结合
new Thread(new Runnable() {
@Override
public void run() {
// 耗时任务
try {
Thread.sleep(3000);
String result = "匿名线程";
Log.i("匿名线程",result);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
Handler
将子线程中的消息传递给主线程。例如:更新UI时使用Handler
定义handler
private Handler handler = new Handler(Looper.getMainLooper()){
};
将子线程中的消息传递给主线程
方式一:
Message msg = new Messag();
msg.what = 1;
msg.obj = "内容";
handler.sendMessage(msg);
方式二:
handler.sendEmptyMessage(0x111);
主线程的接受消息,并处理消息
private Handler handler = new Handler(Looper.getMainLooper()){
handleMessage(Message msg) {
if(msg.what == 1) {
}
}
};
主线程接收到消息并更新UI
private Handler handler = new Handler(Looper.getMainLooper()){
handleMessage(M