Android基础积累——Handler介绍
Handler介绍:
Handler主要用于异步消息的处理:当发出一个消息之后,首先进入一个消息队列,发送消息的函数即刻返回,而另外一个部分逐个的在消息队列中将消息取出,然后对消息进行出来,就是发送消息和接收消息不是同步的处理。这种机制通常用来处理相对耗时比较长的操作。下面从最简单的使用开始。
Handler使用(一)
1、点击开始线程按钮会启动线程更改文本框中的文本,点击结束按钮则将线程结束,更新文本提示。

2、MainActivity代码及解释
package hlf.com.handlerdemo;
import android.content.SyncStatusObserver;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private TextView textView;
private Button btnstart;
private Button btnend;
//创建Handler对象
Handler handler = new Handler();
//创建新的线程对象
Runnable updateThread = new Runnable() {
//执行任务方法
@Override
public void run() {
int i=0;
i++;
//修改textview文本
textView.setText("线程启动" + i);
//将执行的线程放入队列中,等待时间结束,运行其他指定线程对象
//updateThread当前线程
//3000延迟时间
handler.postDelayed(updateThread,3000);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.text_view);
btnstart = (Button) findViewById(R.id.btn1);
btnstart.setOnClickListener(new StartClickListener());
btnend = (Button) findViewById(R.id.btn2);
btnend.setOnClickListener(new EndClickListener());
}
//启动按钮监听事件
private class StartClickListener implements View.OnClickListener{
//调用Handler的post()方法,将要执行的线程对象放到队列当中
@Override
public void onClick(View v) {
handler.post(updateThread);
}
}
private class EndClickListener implements View.OnClickListener{
////调用Handler的removeCallbacks()方法,删除队列当中未执行的线程对象
@Override
public void onClick(View v) {
//删除线程中的指定对象
handler.removeCallbacks(updateThread);
textView.setText("线程停止");
}
}
}
3、布局很简单,只有按钮跟TextView
<TextView
android:id="@+id/text_view"
android:layout_width="match_parent"
android:layout_height="200dp"
android:text="@string/tview"
android:textSize="20dp"
/>
<Button
android:id="@+id/btn1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/btntextstart"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btn2"
android:text="@string/btntextend"/>
Handler使用(二)
1、点击按钮,进度条更新

2、MainActivity,将显示、判断进度条和移除进程代码放在handleMessage方法中,不能放在Runnable中
package hlf.com.hander2;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
public class MainActivity extends AppCompatActivity {
private ProgressBar progressBar;
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
progressBar = (ProgressBar)findViewById(R.id.progressBar);
button = (Button)findViewById(R.id.button);
}
private class StartOnClickListener implements View.OnClickListener{
@Override
public void onClick(View v) {
//显示进度条
progressBar.setVisibility(View.VISIBLE);
//讲进程放入队列
handler.post(runnable);
}
}
Handler handler = new Handler(){
//Runnable接受信息
@Override
public void handleMessage(Message msg) {
//显示进度条
progressBar.setProgress(msg.arg1);
if (msg.arg1<=progressBar.getMax()){
handler.post(runnable);
}else {
handler.removeCallbacks(runnable);
}
}
};
Runnable runnable = new Runnable() {
@Override
public void run() {
int i = 0;
i += 10;
//获得一个消息队列
Message message = handler.obtainMessage();
///设置消息
message.arg1 = i;
try {
//延时1秒
Thread.sleep(1000);
}catch (InterruptedException e){
e.printStackTrace();
}
//发送消息给消息队列
handler.sendMessage(message);
}
};
}
3、布局文件
<ProgressBar
style="@android:style/Widget.ProgressBar.Horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/progressBar" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="开始"
android:id="@+id/button" />
4、进度条种类 详细解释请看 Android简单自定义圆形和水平ProgressBarhttp://blog.csdn.net/mad1989/article/details/38042875
Widget.ProgressBar.Horizontal 横向的Widget.ProgressBar.Small 小圆圈Widget.ProgressBar.LargeWidget.ProgressBar.InverseWidget.ProgressBar.Small.InverseWidget.ProgressBar.Large.Inverse
浙公网安备 33010602011771号