Android中三种线程使用方法
第一种:Thread
示例代码如下
new Thread(new Runnable() {
@Override
public void run() {
//在此调用需要在线程中调用的方法
}
}).start();
第二种:runOnUiThread
示例代码如下
runOnUiThread(new Runnable() {
@Override
public void run() {
//在此调用需要在线程中调用的方法
}
});
第三种:Handler
示例代码如下
Handler hhh = new Handler();
hhh.post(new Runnable() {
@Override
public void run() {
// 在此调用需要在线程中调用的方法
}
});
下面看看在项目中如何使用上面三种线程
创建一个Android项目
我创建三个按钮,分别调用不同种类的线程,布局文件如下(不做过多解释)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<Button
android:id="@+id/One"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/One" />
<Button
android:id="@+id/Two"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/Two" />
<Button
android:id="@+id/Three"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/Three" />
</LinearLayout>
主Activity代码如下
package com.example.testunity;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity {
//定义三个按钮
private Button OneBtn;
private Button TwoBtn;
private Button ThreeBtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//设置视图
setContentView(R.layout.main);
//获取按钮
OneBtn = (Button)this.findViewById(R.id.One);
//给按钮添加点击监听事件
OneBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// 调用我的第一种方法
One();
}
});
//获取按钮
TwoBtn = (Button)this.findViewById(R.id.Two);
//给按钮添加点击监听事件
TwoBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// 调用我的第二种方法
Two();
}
});
//获取按钮
ThreeBtn = (Button)this.findViewById(R.id.Three);
//给按钮添加点击监听事件
ThreeBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// 调用我的第三种方法
Three();
}
});
}
//第一种 Thread 使用方法
private void One() {
//Thread 类中有很多方法,在此仅使用一种代码示范
//有兴趣的自己去查更多的Thread方法
new Thread(new Runnable() {
@Override
public void run() {
// 在此处调用自己的方法
// 打印一个 Tag 为 "AAA"的日志
Log.i("AAA", "One ");
}
}).start();
}
//第二种 runOnUiThread
private void Two() {
// 更多 runOnUiThread 使用方法自己查询
runOnUiThread(new Runnable() {
@Override
public void run() {
// 在此处调用自己的方法
// 打印一个 Tag 为 "AAA"的日志
Log.i("AAA", "TWO");
}
});
}
// 第三种 Handler
private void Three() {
//在此写了 Handler 的三种使用方法, Handler 类有很多方法,
///////////////////////////////////////
Handler handler = new Handler();
Runnable runnable = new Runnable() {
@Override
public void run() {
// 在此处调用自己的方法
// 打印一个 Tag 为 "AAA"的日志
Log.i("AAA", "THREE 1");
}
};
//需要调用下面代码,启动 runnable 线程
handler.post(runnable);
///////////////////////////////////////
/////////////////////////////////////
Handler hhh = new Handler();
hhh.post(new Runnable() {
@Override
public void run() {
// 在此处调用自己的方法
// 打印一个 Tag 为 "AAA"的日志
Log.i("AAA", "THREE 2");
}
});
//////////////////////////////////////
//////////////////////////////////////
//该种使用方法需要在外部传入一个消息,根据传入消息的内容
//判断调用什么方法
Handler hh = new Handler() {
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
// 判断传入的消息,选择调用
switch (msg.what) {
case 1:
// 打印一个 Tag 为 "AAA"的日志
Log.i("AAA", "THREE 3");
break;
case 2:
break;
}
}
};
//获取 hh 的message
Message message = hh.obtainMessage();
//设置消息值
message.what = 1;
////////////////////////////////////
}
}
运行项目
界面如下
分别点击 one、two、three按钮,查看 LogCat 如下
三种线程方法成功调用