Service组件

Service组件

1.概述:

 (1)是什么?

  2)安卓中的应用组件(生命周期方法)

  3)安卓中的一个服务(长时间的工作在后台)

  4)安卓中的一个Context(具备强大的资源访问能力)

 (2Service的应用场合:

Service在实际应用通常用于执行长时间的耗时操作;例如下载,音乐的播放,新闻信息的获取。。。。。

2.FAQ:

 1)耗时操作不是应该在工作线程吗?是的service中执行长时间的耗时操作也是要启动工作线程的

 2)Activity中启动工作线程和service中启动工作线程执行耗时操作有什么不同吗?

首先说明一点,service中要执行的耗时操作是长时间的耗时操作!

Activity中启动工作线程执行耗时操作,一般都是短时间的耗时,例如一次数据加载。

3)为什么不推荐在activity中启动工作线程执行长时间的耗时操作呢?

在实际应用中在activity执行长时间的耗时操作是不推荐的,这由安卓系统的进程管理机制决定。在安卓系统中假如内存不足时,会有选择性的kill掉一些优先级比较低的进程;

   4)安卓中进程分类:

a)前台进程:(允许或正在与用户直接交互的进程)

b)可见进程:(可见,但不可以操作)

c)服务进程:(不可见但有services正在运行)(优先级相对高些;)

d)后台进程:(没有services组件在运行,可能有其他组件,但不可见)

e)空进程:(没有任何组件的进程)

从上到小,进程优先级逐渐降低;

 

以上进程的优先级是由高到低的,我们选择在Services中启动工作线程执行长时间的耗时操作,目的是提高此工作线程所在进程的优先级,从而提高这个进程的生命力。不容易在内存不足时,被杀死。

 

5)所有的耗时操作都在services中启动工作线程执行吗?

不是,长时间的耗时操作推荐在services中启动工作线程。

3.安卓中Services的类型及使用:

(1)启动模式Service

(2)绑定模式Service

(3)混合模式Service

4.安卓中启动模式service的应用:

 

1)构建Service(重写相关启动模式对象的生命周期方法)

2)注册Service(AndroidMaifest.xml)

3)应用Service(重点理解生命周期方法)

 

底层设计是一种单例,不完整的单例;(构造方法是public修饰的)

所有组件的构造方法都不能私有化;

我们在启动service时,加入service对象不存在,底层会通过反射构建service对象,然后调用service对象的无参数的构造函数;

记住:我们自己不能构建service;底层框架构建;

记住:构造方法的修饰符必须是public ,必须是无参的;

记住:所有生命周期方法都是由底层框架回调(底层框架services调用生命周期方法)

 

FAQ:

如何通过隐式意图启动service;

如何通过隐式意图停止service;

如何实现通知与service对象的绑定

如何取消通知与service对象的绑定

 

案例:简单的音乐播放;

 

5.安卓中IntentService

1)“在启动模式中的应用,IntentService本身也是一个service,它应用于启动模式,它内置一个工作线程,此线程对象可以用于执行耗时操作,耗时操作执行结束后会自动停止service;

我们在使用IntentService要构建一个IntentServive对象的子类对象,并重写相关方法,onHandlerIntent;此方法会运行在工作线程,可以执行耗时操作;

2IntentService为什么会运行在工作线程?

 

 

6.安卓中绑定模式的Service

FAQ:

activity中,我们可以直接new service对象吗?

activity中,我们需要service对象如何获得?

如何理解绑定模式service?

 

此时我们可以调用service中的相关方法;

 

 

 

 

绑定(bind)模式service相当于在activityservice之间建立一个长连接,serviceconnection对象,我们可以在activity中通过这个长连接对象,访问到绑定的那个service对象;

 

绑定模式service的应用:

1)创建service:直接或间接的继承Service

onCreate():service创建的时候执行

onBind():执行绑定操作时执行

onUnBind():执行解除绑定时操作

onDestory():service销毁时

2)注册service:AndroidManifest.xml

3)绑定service:context.bindServi ce(...);

4)解除service绑定:context.unBindService(...);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值