一、Handler用处
一般在主线程中定义,用于与子线程数据通信,主线程一般用于UI的更新操作,如果放在子线程中是很危险的,比如文件上传、下载等操作,这些耗时的操作放在主线程中会导致程序卡住,如果超过五秒钟系统会强制关闭进程并给一个强制关闭的提示,此时应该把这些操作放在一个子线程中,待操作完成后用Message给Handler发一个消息,然后Handler去处理这个消息并配合主线程更新UI。
二、Handler实例
实现的功能:单击一个Create_thread Button创建一个子线程,在子线程中传递一个Message给Handler,Handler处理该Message,并把Message中的保存的字符取出来,更新到Create_thread控件文字上,单击Start_Activity Button 使用Handler的postDelayed方法启动另外一个子线程,在该子线程中启动另外一个Activity界面。
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:id="@+id/Create_thread"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:onClick="OnclickButton"
android:textSize="17sp"
android:text="create a thread" />
<Button
android:id="@+id/Start_Activity"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:onClick="OnclickButton"
android:textSize="17sp"
android:text="Start a Activity" />
</LinearLayout>
Handler实现
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
switch(msg.what){
case MSG_ID_0:
{
Bundle b = msg.getData();
String text1 = b.getString("buttonText");
Button btn = (Button)findViewById(R.id.Create_thread);
btn.setText(text1);
}
break;
}
super.handleMessage(msg);
}
};
子线程实现:
class MyThread implements Runnable {
public void run() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Message msg = mHandler.obtainMessage(MSG_ID_0);
Bundle b = new Bundle();// 存放数据
b.putString("buttonText", "Text From Mythread");
msg.setData(b);
msg.sendToTarget();
}
}
控件响应函数,这里采用了对所有控件的统一处理方法
public void OnclickButton(View target)
{
switch(target.getId()) {
case R.id.Create_thread:
{
MyThread m = new MyThread();
new Thread(m).start();
}
break;
case R.id.Start_Activity:
{
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Intent intent = new Intent(MainActivity.this, OtherActivity.class);
startActivity(intent);
MainActivity.this.finish();
}
}, 2000);
}
break;
}
}
源码下载地址:http://download.csdn.net/detail/m370809968/6379669