首页 > 叽歪生活 > 《android视频教程》第一季 第14集 Handler的使用(一)

《android视频教程》第一季 第14集 Handler的使用(一)

handler类允许你发送消息和处理线程消息队列中的消息及runnable对象。handler实例都是与一个线程和该线程的消息队列一起使用,一旦 创建了一个新的handler实例,系统就把该实例与一个线程和该线程的消息队列捆绑起来,这将可以发送消息和runnable对象给该消息队列,并在消 息队列出口处处理它们。

 

handler类有两种主要用途:1。按照时间计划,在未来某时刻,对处理一个消息或执行某个runnable实例。2。把一个对另外线程对象的操作请求放入消息队列中,从而避免线程间冲突。

 

时间类消息通过如下方法使用: post(Runnable), postAtTime(Runnable, long), postDelayed(Runnable, long), sendEmptyMessage(int), sendMessage(Message), sendMessageAtTime(Message, long), and sendMessageDelayed(Message, long)
methods. post之类函数可以传输一个runnable对象给消息队列,并在到达消息队列后被调用。sendmessage之类函数可以传送一个包含数据的 message对象,该message对象可以被Handler类的handleMessage(Message) 方法所处理。

 

post之类函数和sendmessage之类的函数都可以指定消息的执行时机,是立即执行、稍后一段时间执行,还是在某个确定时刻执行。这可以用来实现超时、消息或其他时间相关的操作。

 

当一个进程启动时,主线程独立执行一个消息队列,该队列管理着应用顶层的对象(如:activities、broadcast receivers等等)和所有创建的窗口。你可以创建自己的一个线程,并通过handler来与主线程进行通信。这可以通过在新的线程中调用主线程的 handler的post和sendmessage操作来实现。

实例代码(略去布局文件):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package com.cxybase.myHandler;
 
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
 
public class myHandler extends Activity {
 
 private final static String TAG = "cxybase";
 
 //声明控件对象变量
 private Button startButton = null;
 private Button endButton = null;
 
 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.main);
 
 //获取控件对象,并设置按钮的监听器
 startButton = (Button)findViewById(R.id.startButton);
 startButton.setOnClickListener(new startButtonOnClickListener());
 
 endButton = (Button)findViewById(R.id.endButton);
 endButton.setOnClickListener(new endButtonOnClickListener());
 }
 
 
 //设置startButton监听内部类
 class startButtonOnClickListener implements OnClickListener
 {
 
 public void onClick(View v) {
 // TODO Auto-generated method stub
 //将要执行的线程对象,加入队列中
 handle.post(updateThread);
 }
 
 }
 
 //设置endButton监听内部类
 class endButtonOnClickListener implements OnClickListener
 {
 
 public void onClick(View v) {
 // TODO Auto-generated method stub
 handle.removeCallbacks(updateThread);
 }
 
 }
 
 //创建一个Handler对象
 Handler handle = new Handler();
 
 //实现线程类
 //将要执行的操作写在线程对象的run()方法当中
 Runnable updateThread = new Runnable() {
 public void run() {
 // TODO Auto-generated method stub
 Log.i(TAG, "updateThread");
 handle.postDelayed(updateThread, 1000);
 }
 };
 
}

转载请标明出处:萝卜根

原文地址请标明:原文地址

  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.
*

:yund: :yun: :yes: :xiaxia: :xiaom: :xiaohan: :wuyu: :wuxiao: :woshou: :woquan: :wink: :tiaodou: :tiaod: :sikao: :pa: :oops: :ok: :no: :mad: :lihai: :leihua: :lei: :ku: :konghe: :kbu: :jiwai: :jiong: :jiay: :huo: :huaixiao: :hanxiao: :han: :haha: :guolai: :guan: :guai: :ganga: :eek: :dou: :diao: :deng: :buli: :bizui: :bishi: :biggrin: :arrow: