Android学习笔记(五) handler
一、基本概念
在手机使用时,经常碰到这种情况:比如在我们下载的时候,若是将下载方法单独为一个Activity的时候,那么下载时,其他的Activity是没有响应的,那么这个时候整部手机就处于了当机的状态,而Handler就是用来解决这个问题的.
意思就是说,将下载放在一个单独的线程,那么当这个线程执行的时候,并不会影响该Activity的线程.
二、使用方法
通过调用handler的post方法实现线程的操作.
一个最简单的Handler例子:
XML文件:
Java代码
<span style="font-size: x-small;"><?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:weightSum="1">
<Button
android:id="@+id/start"
android:text="@string/opt_start"
android:layout_height="wrap_content"
android:layout_weight="0.38"
android:layout_width="202dp"/>
<Button
android:layout_height="wrap_content"
android:id="@+id/end"
android:text="@string/opt_end"
android:layout_weight="0.38"
android:layout_width="202dp">
</Button>
</LinearLayout>
</span>
Handler文件:
Java代码
<span style="font-size: x-small;">package com.hadler;
import android.accounts.Account;
import android.accounts.OnAccountsUpdateListener;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.text.style.UpdateAppearance;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class Handlertest extends Activity {
/** Called when the activity is first created. */
private Button start;
private Button end;
OnClickListener start_listen = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
start = (Button)findViewById(R.id.start);
end = (Button)findViewById(R.id.end);
start_listen = (new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//调用handler的post方法,将要执行的线程对象加到队列当中
handler.post(updateThread);
}
});
start.setOnClickListener(start_listen);
OnClickListener end_listen = (new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
handler.removeCallbacks(updateThread);
}
});
end.setOnClickListener(end_listen);
}
//创建一个Handler对象
Handler handler = new Handler();
//线程类,实现Runnable接口,将要执行的操作写在run方法中
Runnable updateThread = new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("UpdateThread");
//在run方法内部,执行postDelayed或者post方法
handler.postDelayed(updateThread, 3000);
}
};
}</span>
这个例子中可看到LogCat中每隔3秒中就打印一句UpdateThread.
即是,不影响当前Acvtivity,调用新的进程完成的代码段. 也就是异步处理.
三、使用handler更新ProgressBar进度条
接着看一个例子,更新进度条的
Java代码
<span style="font-size: x-small;"> package mars.barhandler;
import android.app.Activity;
import android.os.Bundle;&n
补充:移动开发 , Android ,