Android-初识Handler-子线程异步更新UI
Android-初识Handler-子线程异步更新UI
简单的例子:子线程异步的更新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);
- }
- }
- }
下面是main.xml配置文件
评论暂时关闭