作者:刘昊昱
博客:http://blog.csdn.net/liuhaoyutz
和JAVA一样,Android下我们可以通过创建一个Thread对象实现多线程。Thread类有多个构造函数,一般通过构造函数Thread(Runnable runnable)实现多线程,代码如下:
Thread thread = new Thread(new Runnable() {//重写Runnable的run()方法publicvoid run() {//子线程操作实现}
});
thread.start(); // 启动线程thread执行
使用标准的JAVA线程类Thread可以创建子线程,但是在Android下,用Thread创建的线程有一个问题就是Thread创建的子线程不能对UI界面进行任何操作。为此,Android引入了Handler消息处理机制,通过Handler在子线程和UI线程之间传递信息,达到更新UI界面的目的。
下面看一个使用Handler处理消息的例子,其运行效果如下:
先来看主布局文件,其内容如下:
<?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" ><TextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:id="@+id/textView" /></LinearLayout>
下面看主Activity文件的实现,其内容如下:
package com.liuhaoyu;import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.widget.TextView;public class MainActivity extends Activity {public Handler handler;/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);final TextView text = (TextView)findViewById(R.id.textView);handler = new Handler() {public void handleMessage(Message msg) {Log.i("Looper",String.valueOf(msg.what));if(msg.what == 0x0){text.append(Integer.toString(msg.arg1));}} };Thread thread = new Thread(new Runnable() {public void run() {int i = 0;while(true){try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}Message message = new Message();message.arg1 = i;message.what = 0x0;handler.sendMessage(message);if(i < 9)i++;elsei = 0;}}});thread.start();}
}