《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); } }; } |
转载请标明出处:萝卜根
原文地址请标明:原文地址