本文实例讲述了android中handle类的用法。分享给大家供大家参考。具体如下:
当我们在处理下载或是其他需要长时间执行的任务时,如果直接把处理函数放activity的oncreate或是onstart中,会导致执行过程中整个activity无响应,如果时间过长,程序还会挂掉。handler就是把这些功能放到一个单独的线程里执行,与activity互不影响。
当用户点击一个按钮时如果执行的是一个常耗时操作的话,处理不好会导致系统假死,用户体验很差,而android则更进一步,如果任意一个acitivity没有响应5秒钟以上就会被强制关闭,因此我们需要另外起动一个线程来处理长耗时操作,而主线程则不受其影响,在耗时操作完结发送消息给主线程,主线程再做相应处理。那么线程之间的消息传递和异步处理用的就是handler。
以下模拟一个简单的相册查看器,每隔2秒自动更换下一张照片。
main.xml布局文件:
1
2
3
4
5
6
7
8
9
10
11
12
|
<?xml version= "1.0" encoding= "utf-8" ?> <linearlayout xmlns:android= "http://schemas.android.com/apk/res/android" android:orientation= "vertical" android:layout_width= "fill_parent" android:layout_height= "fill_parent" android:gravity= "center" > <imageview android:id= "@+id/imageview" android:layout_width= "fill_parent" android:layout_height= "wrap_content" android:src= "@drawable/p1" android:gravity= "center" /> </linearlayout> |
handleactivity类:
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
|
package com.ljq.handle; import android.app.activity; import android.os.bundle; import android.os.handler; import android.os.message; import android.widget.imageview; public class handleactivity extends activity { private imageview imageview = null ; private handler handler = new handler() { @override public void handlemessage(message msg) { switch (msg.what) { case 0 : imageview.setimageresource(r.drawable.p1); break ; case 1 : imageview.setimageresource(r.drawable.p2); break ; case 2 : imageview.setimageresource(r.drawable.p3); break ; case 3 : imageview.setimageresource(r.drawable.p4); break ; } super .handlemessage(msg); } }; @override public void oncreate(bundle savedinstancestate) { super .oncreate(savedinstancestate); setcontentview(r.layout.main); imageview = (imageview) findviewbyid(r.id.imageview); thread.start(); } int what = 0 ; thread thread = new thread( new runnable() { public void run() { while ( true ) { handler.sendemptymessage((what++) % 4 ); try { thread.sleep( 2000 ); } catch (interruptedexception e) { e.printstacktrace(); } } } }); } |
运行结果:
希望本文所述对大家的android程序设计有所帮助。