您的位置:首页 > 移动开发 > Android开发

android初学者之HandlerThread

2014-02-22 10:56 169 查看
之前研究过handler
和looper消息队列,不过Android里的handler不是另外开启线程来执行的,还是在主UI线程中,如果想另启线程的话需要用到HandlerThread来实现。在使用HandlerThread的时候需要实现CallBack接口以重写handlerMessage方法,在handlerMessage方法中来处理自己的逻辑。下来给出一个小例子程序。
002
003
layout文件很简单,就一个按钮来启动HanlderTread线程
004
005
<?xml
version=
"1.0"
encoding=
"utf-8"
?>
006
<LinearLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
007
android:layout_width=
"fill_parent"
008
android:layout_height=
"fill_parent"
009
android:orientation=
"vertical"
>
010
011
<TextView
012
android:layout_width=
"fill_parent"
013
android:layout_height=
"wrap_content"
014
android:text=
"@string/hello"
/>
015
016
<Button
017
android:id=
"@+id/handlerThreadBtn"
018
android:layout_width=
"wrap_content"
019
android:layout_height=
"wrap_content"
020
android:text=
"startHandlerThread"
/>
021
022
</LinearLayout>
023
Activity代码如下:
024
025
package
com.tayue;
026
027
import
android.app.Activity;
028
import
android.os.Bundle;
029
import
android.os.Handler;
030
import
android.os.Handler.Callback;
031
import
android.os.HandlerThread;
032
import
android.os.Message;
033
import
android.view.View;
034
import
android.view.View.OnClickListener;
035
import
android.widget.Button;
036
/**
037
*
038
*
@authorxionglei
039
*
040
*/
041
public
class
TestHandlerActivity
extends
Activity
implements
OnClickListener{
042
043
public
Button
handlerThreadBTN;
044
MyHandlerThread
handlerThread;
045
Handler
handler;
046
047
/**
Calledwhentheactivityisfirstcreated.*/
048
@Override
049
public
void
onCreate(Bundle
savedInstanceState){
050
super
.onCreate(savedInstanceState);
051
//打印UI线程的名称
052
System.out.println(
"onCreate
CurrentThread="
+
Thread.currentThread().getName());
053
054
setContentView(R.layout.main);
055
056
handlerThreadBTN
=(Button)findViewById(R.id.handlerThreadBtn);
057
handlerThreadBTN.setOnClickListener(
this
);
058
059
handlerThread
=
new
MyHandlerThread(
"myHanler"
);
060
handlerThread.start();
061
//注意:
这里必须用到handler的这个构造器,因为需要把callback传进去,从而使自己的HandlerThread的handlerMessage来替换掉Handler原生的handlerThread
062
handler
=
new
Handler(handlerThread.getLooper(),
handlerThread);
063
064
065
}
066
067
@Override
068
public
void
onClick(View
v){
069
//点击按钮后来开启线程
070
handler.sendEmptyMessage(
1
);
071
}
072
073
074
private
class
MyHandlerThread
extends
HandlerThread
implements
Callback
{
075
076
public
MyHandlerThread(String
name){
077
super
(name);
078
}
079
080
@Override
081
public
boolean
handleMessage(Message
msg){
082
//打印线程的名称
083
System.out.println(
"
handleMessageCurrentThread="
+
Thread.currentThread().getName());
084
return
true
;
085
}
086
087
088
}
089
090
091
092
093
}
094
点击按钮,打印的日志如下(这里点击了
3
次)
095
07
-
06
09
:
32
:
48.776
:
I/System.out(
780
):
onCreateCurrentThread=main
096
07
-
06
09
:
32
:
55.076
:
I/System.out(
780
):
handleMessageCurrentThread=myHanler
097
07
-
06
09
:
32
:
58.669
:
I/System.out(
780
):
handleMessageCurrentThread=myHanler
098
07
-
06
09
:
33
:
03.476
:
I/System.out(
780
):
handleMessageCurrentThread=myHanler
099
100
HandlerThread就这么简单。
101
102
当然
android自己也有异步线程的handler,就是AsyncTask,这个类就是封装了HandlerThread和handler来实现异步多线程的操作的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: