安卓四大组件之服务

 

 

1.服务简介

     服务是安卓中实现程序后台运行的解决方案,它非常适合去执行那些不需要和用户交互而且还长时间运行的任务,服务的运行不依赖于任何用户界面,即使程序被切换到后台,或者用户打开了另外一个应用程序,服务仍然能够保持运行。

注意:

1)服务并不是运行在一个独立的进程中,而是依赖于创建服务时所在的应用程序进程。当该进程被杀掉时,所有依赖于该进程的服务也会停止运行。

2)当我们的服务要进行异步操作时或者说避免主线程阻塞时,我们需要自主在服务里面创建子线程。

 

2.创建线程方法(三种)

1)继承Thread

启动该线程:

 

2)实现Runnable

启动该线程:

 

3)匿名类(常用)

 

 3.在子线程中更新ui

说明:handler本质用法就是指我们要用其来更新我们的ui组件的信息,有两种方法定义,要不在主线程内定义,只需要定义handler,.在发送信息的时候不用定义looper,因为主线程自己会有looper,第二种定义方法就是自己定义的线程里面定义我们的handler,但在发送信息那边需要定义好looper,定义完looper,因为构造函数的关系我们的messagequeue也会一同建立。

 

注意:我这边说的定义其实就是定义一个handler类,里面有一个处理信息的方法,而我们如何判断该信息,选择好对应的方法去处理,就要使用到一个what属性去定义~

 

总结:先选择方式定义好handler写好处理信息的方法,然后发送信息(注意what属性)就可以了。

 

具体的handler的工作视图如下:

 

代码:http://www.runoob.com/w3cnote/android-tutorial-handler-message.html

 

4.使用AsyncTask

(1)使用步骤:

1)继承AsyncTask(其为抽象类)

2)复写几个方法

3)获取该对象,并且调用execute方法(是否传入数据,看params的数据类型)

 

(2)AsyncTask的三个泛型参数

 

(3)复写的几个方法解析(经常使用的)

 

 (4)启动该任务

 

(5)总结

 

 5.服务的基本用法

(1)普通服务使用步骤

1)继承服务,复写三个方法

2)注册该服务

3)启动该服务(暂停)

 

启动和暂停服务:

 

 (2)实现活动和服务进行通信的服务(也就是第二种开启服务的服务类)

核心步骤:

1)在服务内部增加实现一个内部类继承BInder,然后在服务实现一个onBind方法返回这个内部类

2)在活动实现一个匿名内部类ServiceConnection来调用服务的内部类方法

注意:这边要使用bindService()和unbindService()方法来绑定和取消绑定

 

(3)两种启动方法的生命周期

 

 

6.服务的更多技巧

(1)使用前台服务

步骤:就是在oncreate()方法中,创建一个通知。

核心代码:

 

(2)使用IntentService

说明:一般的服务是默认在主线程之中的,所以如果服务要进行一些耗时的操作,必要创建子线程进行处理,如果没有就会发生anr错误,而创建了子线程又必须要在执行完逻辑操作之后关闭它,必然该子线程会一直启动,导致资源浪费,但很多程序员很容易就会忘掉关掉它,所以为了解决这个问题,就出现了intentService,而其与普通service的区别在于,其是一个创建异步的,会自动停止的服务。

实现:

1)创建该类继承IntentService

说明:其onHandleIntent()方法已经是在子线程中运行的了,所以不用担心ANR问题。

 2)启动该服务

 

posted @ 2017-09-28 20:15  鹏达君  阅读(204)  评论(0编辑  收藏  举报