Handler

android.os.Handler
  Handler在android里负责发送和处理消息。它的主要用途有:
  1)按计划发送消息或执行某个Runnanble(使用POST方法);
  2)从其他线程中发送来的消息放入消息队列中,避免线程冲突(常见于更新UI线程)
   默认情况下,Handler接受的是当前线程下的消息循环实例(使用Handler(Looper looper)、Handler(Looper looper, Handler.Callback callback)可以指定线程),同时一个消息队列可以被当前线程中的多个对象进行分发、处理(在UI线程中,系统已经有一个Activity来处理了,你可以再起若干个Handler来处理)。在实例化Handler的时候,Looper可以是任意线程的,只要有Handler的指针,任何线程也都可以sendMessage。Handler对于Message的处理不是并发的。一个Looper 只有处理完一条Message才会读取下一条,所以消息的处理是阻塞形式的(handleMessage()方法里不应该有耗时操作,可以将耗时操作放在其他线程执行,操作完后发送Message(通过sendMessges方法),然后由handleMessage()更新UI)。


在手机开发的过程中有很多功能是不能放在Activity的正常操作中,费时,用户体验差,一般都将下载功能、数据处理等都放在一个单独的线程中处理。



Handler在android里负责发送和处理消息。它的主要用途有:

   1)按计划发送消息或执行某个Runnanble(使用POST方法);

   2)从其他线程中发送来的消息放入消息队列中,避免线程冲突(常见于更新UI线程)




<?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"
>

<Button android:id="@+id/startButton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="start"
/>

<Button android:id="@+id/endButton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="end"
/>
</LinearLayout>




package com.demo;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class Activity1 extends Activity {
/** Called when the activity is first created. */

private Button startButton;
private Button endButton;

//初始化,取 得view
private void init(){
startButton = (Button) this.findViewById(R.id.startButton);
endButton = (Button) this.findViewById(R.id.endButton);
}




@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
init();
setStartListener();
setEndListener();
}


//给开始按钮新增监听
private void setStartListener(){
startButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//将Runnable 一起发送给处理的线程
handler.post(updateThread);
}
});
}

//给结束按钮新增监听
private void setEndListener(){
endButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
handler.removeCallbacks(updateThread);

}
});
}

Handler handler = new Handler();
Runnable updateThread = new Runnable(){
@Override
public void run() {
System.out.println("updateThread");
//隔3秒,加入线程
handler.postDelayed(updateThread, 3000); //延迟3秒
}

};
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值