Android Handler(一)
16lz
2021-01-23
转载自:http://www.eoeandroid.com/thread-93732-1-1.html
关键词
Android.os.Handler涉及较多的知识点,我把一些关键词列举在下面,将主要介绍Handler:
java代码:
android.os.Handler 、 android.os.Handler.Callback
Looper、Threadle、Runnable
Message、Message queue
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)。
倒计时程序
利用Timer 编写一个倒计时程序,程序使用Timer和TimerTask来完成倒计时,同时使用sendMessages方法发送消息,然后在HanleMessage里更新UI。
Activity布局:
java代码:
android:id="@+id/btnStartTime"
android:text="开始计时"
android:layout_width="80dip" android:layout_height="wrap_content" >
android:id="@+id/btnStopTime"
android:text="停止计时"
android:layout_width="80dip" android:layout_height="wrap_content" />
复制代码
这里使用TextView来显示倒计时的时间变化,两个按钮用于控制时间的开始和停止。SeekBar主要是用于查看线程是否被阻塞(阻塞时无法拖动)。
java代码:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
txt = (TextView) findViewById(R.id.txt);
btnStart = (Button) findViewById(R.id.btnStartTime);
btnStop = (Button) findViewById(R.id.btnStopTime);
Log.d("ThreadId", "onCread:"+ String.valueOf(Thread.currentThread().getId()));
myHandler = new Handler(this);
btnStart.setOnClickListener(this);
btnStop.setOnClickListener(this);
}
关键词
Android.os.Handler涉及较多的知识点,我把一些关键词列举在下面,将主要介绍Handler:
java代码:
android.os.Handler 、 android.os.Handler.Callback
Looper、Threadle、Runnable
Message、Message queue
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)。
倒计时程序
利用Timer 编写一个倒计时程序,程序使用Timer和TimerTask来完成倒计时,同时使用sendMessages方法发送消息,然后在HanleMessage里更新UI。
Activity布局:
java代码:
android:id="@+id/btnStartTime"
android:text="开始计时"
android:layout_width="80dip" android:layout_height="wrap_content" >
android:id="@+id/btnStopTime"
android:text="停止计时"
android:layout_width="80dip" android:layout_height="wrap_content" />
复制代码
这里使用TextView来显示倒计时的时间变化,两个按钮用于控制时间的开始和停止。SeekBar主要是用于查看线程是否被阻塞(阻塞时无法拖动)。
java代码:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
txt = (TextView) findViewById(R.id.txt);
btnStart = (Button) findViewById(R.id.btnStartTime);
btnStop = (Button) findViewById(R.id.btnStopTime);
Log.d("ThreadId", "onCread:"+ String.valueOf(Thread.currentThread().getId()));
myHandler = new Handler(this);
btnStart.setOnClickListener(this);
btnStop.setOnClickListener(this);
}
更多相关文章
- Android不常用代码(1)
- Android获取网页源代码
- android中执行线程的部分代码
- android 学习笔记有用代码片段(3)
- Android实现多线程断点下载的方法
- Android各代码层获取系统时间的方法
- Android线程池(四)ThreadPoolExecutor类源码解析
- Android开发 开启闪光灯 关键代码
- Android非UI线程更新UI的几种方法