public class Handler
extends Object
在Android中,Handler类一般用来处理一些耗时操作。为什么耗时操作要用到Handler机制呢?直接写耗时操作不行吗?这是因为:
1)Google只允许主线程操控UI,Android的主线程又称为UI线程。(如果有同学想问为什么其他线程不能操控UI界面呢?博主是这样考虑的:其一,如果有多个线程操作UI会发生冲突,其二这样会产生死锁,画面会卡死)
2)Google为了给Android良好的用户体验,如果UI界面产生5s的延迟,会产生ANR异常,程序会直接退出,所以我们当我们的UI进行耗时操作时(比如访问数据库,请求网络等时)就有可能产生ANR,为了将耗时操作放到其他线程而主线程又能得到操作的结果,这个时候我们采用Handler机制。
在使用Handler类的时候我们应该把握两个地方,第一是如何使用sendMessage(Message message)方法,另外一个是如何使用应用中的handledMessage(Message message)方法
一般是这样使用的:
我们要采用多态的方法创建一个Handler子类的实例,在子类中我们覆写handleMessage方法(主类的handleMessage是空的),所以我们要自己定义handleMessage,这个方法会在当我们调用sendMessage()方法后调用(如何调用的机制请参阅Handler内部原理)。然后我们把耗时操作放在子线程中,将获取的数据存到Message对象里面,然后通过sendMessage(message)将数据传输过去,然后handlerMessage(Mesage message)里面判断message.what的值做相应的操作。也可以使用sendEmptyMessage(int what, long delayMiliis),第一个参数是int型的变量,第二个是时延。