简单的例子:子线程异步的更新UI,同时不影响主线程的操作本身界面的操作
下面是main.xml配置文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<Button
android:id="@+id/btnFirst"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="按钮1" >
</Button>
<Button
android:id="@+id/btnSecond"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="按钮2" >
</Button>
</LinearLayout>
代码:
package com.liujin.game;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class TestHandlerImage extends Activity implements OnClickListener {
private Button btnFirst, btnSecond;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btnFirst = (Button) this.findViewById(R.id.btnFirst);//得到按钮
btnSecond = (Button) this.findViewById(R.id.btnSecond);
btnFirst.setOnClickListener(this);//设置监控
btnSecond.setOnClickListener(this);
MyThread myThread = new MyThread();//开启子线程
myThread.start();
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.btnFirst:
btnFirst.setText("我点击按钮1");
btnSecond.setText("等待点击");
break;
case R.id.btnSecond:
btnFirst.setText("等待点击");
btnSecond.setText("我点击按钮2");
break;
}
}
class MyThread extends Thread {
TitleEventHandler handler;
public int sleepTime=1000;
public int Interval=0;
public void run() {
Looper mainLooper = Looper.getMainLooper();//得到主线程的Looper,每一个Activity都默认自带一个Looper看上一篇的源码
handler = new TitleEventHandler(mainLooper);
handler.removeMessages(0);
Message msg = null;
Long start,end;
int time = 15;
while (true) {//下面的代码很简单就是定时的每过一秒发送一个消息给主线程
try {
time--;
start=System.currentTimeMillis();
msg = handler.obtainMessage(1, 1, 1, "当前还剩" + (time + 1)+ "秒");
handler.sendMessage(msg);//发送消息
end=System.currentTimeMillis();
Interval=(int) (end-start);
if(Interval<sleepTime){//定时睡觉疫苗
Thread.sleep(sleepTime-Interval);
}
} catch (InterruptedException e) {
}
}
}
}
class TitleEventHandler extends Handler {
public TitleEventHandler() {
super();
}
public TitleEventHandler(Looper looper) {
super(looper);
}
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
setTitle((String) msg.obj);
}
}
}