首页 > 编程知识 正文

java的handler机制(java handler模式)

时间:2023-05-04 00:52:25 阅读:75873 作者:3572

1 .在什么场合需要使用HandlerThread

1 ) .耗时且难以在主线程上执行的操作(可以使用其他线程方法而不考虑第二点) )。

2 )需要在后台执行多个耗时的操作)如果不麻烦,也可以使用多个TThread )。

2.HandlerThread的使用步骤

1 )创建HandlerThread对象

2 )执行start方法,启动HandlerThread的Looper循环

3 ) .在主线程中创建Handler对象,并引用HandlerTherad的looper

4 )将各种消息放入Handler对象的处理

5 ) .如果需要,向在步骤3中创建的Handler对象发送消息

6 ) .不再需要HandlerThread时调用quit或quitSafely停止HandlerThread

示例代码如下。 未进行各种错误处理。 仅供参考。

Java

publicclassmainactivityextendsappcompatactivity {

私有处理程序;

私有握手协议;

私有final int msg _ download=1;

私有金融int msg _ download2=2;

@Override

protectedvoidoncreate (边界维护实例state )。

super.oncreate (savedinstancestate;

setcontentview (r.layout.activity _ main;

myhandler thread=new handler thread (test _ thread );

//这一步很重要

myHandlerThread.start (;

handler=new handler (myhandler thread.get looper () )。

@Override

publicvoidhandlemessage (消息msg )。

okhttpclientclient=newokhttpclient (

super.handle消息(msg;

交换机(msg.what ) {

case MSG_DOWNLOAD:

请求请求=new request.builder (

. URL(http://Baidu.com) )

. build (;

try {

响应响应=client.new call (request ).execute );

log.d(download ),response.body ).string );

}catch(ioexceptione ) {

e .打印堆栈跟踪(;

}

布雷克;

case MSG_DOWNLOAD2:

请求请求1=new request.builder (

. URL(http://Bcoder.com) )。

. build (;

try {

响应响应=client.new call (request1).execute );

log.d(download ),response.body ).string );

}catch(ioexceptione ) {

e .打印堆栈跟踪(;

}

布雷克;

}

}

(;

}

publicvoidondownload 1点击{

handler.sendemptymessage (msg _ download;

}

publicvoidondownload 2点击{

handler.sendemptymessage (msg _ download 2;

}

公共语音查询(viewv ) {

myHandlerThread.quit (;

}

}

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

publicclassmainactivityextendsappcompatactivity {

privateHandlerhandler;

私有握手协议;

私有inalintmsg _ download=1;

私有inalintmsg _ download2=2;

@Override

protectedvoidoncreate (边界维护实例state )。

super.oncreate (savedinstancestate;

setcontentview (r.layout.activity _ main;

myhandler thread=new handler thread (test _ thread );

//这一步很重要

myHandlerThread.start (;

handler=new handler (myhandler thread.get looper () )。

@Override

publicvoidhandlemessage (消息msg )。

okhttpclientclient=newokhttpclient (;

super.handle消息(msg;

交换机(msg.what ) {

caseMSG_DOWNLOAD:

请求请求=new request.builder (

. URL(http://Baidu.com) )

. build (;

try{

响应响应=client.new call (request ).execute );

log.d(download ),response.body ).string );

}catch(ioexceptione ) {

e .打印堆栈跟踪(;

}

布雷克;

caseMSG_DOWNLOAD2:

请求请求1=new request.builder (

. URL(http://Bcoder.com) )。

. build (;

try{

响应响应=client.new call (request1).execute );

log.d(download ),response.body ).string );

}catch(ioexceptione ) {

e .打印堆栈跟踪(;

}

布雷克;

}

}

(;

}

publicvoidondownload 1点击{

handler.sendemptymessage (msg _ download;

}

publicvoidondownload 2点击{

handler.sendemptymessage (msg _ download 2;

}

公共语音查询(viewv ) {

myHandlerThread.quit (;

}

}

如果在测试过程中多次单击Download1和Download2按钮,handler对象将按单击顺序多次下载网页baid.com和bcoder.com

要不要像Thread那样写HandlerThread的子类?

真正程序的执行部分在handler的消息处理中,所以完全不需要

4.QQ和QQ安全有什么区别?

5 .处理程序树的其他特征

1 ).HandlerThread的多个操作按任务1 (任务2 )任务3 )、和串行顺序执行,因此如果希望尽快得到执行结果,建议不要使用HandlerThread这样的方式

6 .下载测试代码

奖赏

微信扫一扫,奖励作者吧~

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。