Service初探与异步消息处理机制

784 查看

Service这部分,也算是Android中非常重要的知识了,尤其是做复杂应用的时候。至于异步消息和多线程,在功能复杂的同时用的也是越来越多,加上这几天在写Windows项目的部分里面也涉及到了异步套接字等等的异步知识,发现,进程间的通讯等等也需要重新看看。知识可能就是这样把,也许你当初把书摔在地上说没用的东西,可能这个时候你就会后悔了。

Handler的异步消息处理机制

android开发当中,经常会有一些耗时操作,他们是不能放在主线程当中的。相信学过操作系统的人都知道『阻塞』是什么意思,如果主线程中放了大量的耗时操作,那么整个程序的用户体验势必会变得很差。所以,我们很自然而然就想到了——多线程.

浅谈多线程

多线程网上有很多资料解释,在此不做赘述,只是简单的把多线程实现的几种方式说一下.

1.继承Thread类

我们可以自己定义一个类,然后继承Thread这个基类。重写类中的run方法。run方法中,放入我们想要在子线程所做的耗时操作。在类的外部,可以创建一个我们自定义的类的对象,之后调用start成员方法,就可以自动执行run方法内的代码.

2.重新实现runnable接口

3.匿名类

这种方法相对来说,比较方便,简单,还是比较好用的.

多线程不是万能的

我们可能觉得,有了多线程之后,很多耗时操作就都能够解决了,但是,假如我们现在一个activity中有一个button,一个textview,我们想通过button的点击,执行一系列的耗时操作之后,更新textview控件上面的内容。由于有了耗时操作的出现,我们很自然的想到多线程的例子,但是请注意,子线程里面是不允许对UI控件进行操作的。不信的话,你可以自己写一个子线程,然后在里面调用textview的settext方法试试,是会报错的。所以,这就用到了我们要说的异步消息处理机制。

在操作系统中,异步就意味着我们不用阻塞在那些耗时的操作上,只需要发出一个耗时操作的请求就可以做接下来的事情,这样,就不会发生进程的阻塞。等到耗时操作完成之后会用特定的方式来通知我们,已经完成。这一点在windows的异步套接字编程上也体现的很好。那么在android中,异步任务机制还有更奇妙的运用。

异步消息处理机制

异步消息的处理在android中有以下应用:当我们要执行耗时操作的同时还要对UI控件进行操作的时候,因为UI的操作不能放在子线程中运行,我们就可以把UI的操作部分传递到主线程中进行处理,把耗时操作留在子线程中进行,这样既不会阻塞进程,也完成了对UI的操作。