安卓四大组件之--service

服务:长期后台运行的没有界面的activity,程序写法和activity类似。

安卓系统进程管理是按照一定规则的:

1.默认情况下,关闭掉一个应用程序,清空了这个应用程序的任务栈,应用程序的进程还会保留。因为手机内存较小,方便下次快速启动应用程序,但是也会带来内存不足的问题。

2.安卓系统有一套内存清理机制,按照优先级去回收系统的内存。


进程分为5个等级的优先级:(从高到低)

1.Foreground process 前台进程  用户正在玩的应用进程

2.Visible process 可视进程   用户仍然可以看到这个进程的界面

3.Service process服务进程  应用程序有一个组件在后台运行

4.Backgroundprocess 后台进程  应用程序没有服务在运行,并且最小化(activity onstop)

5.Empty process 空进程   没有任何运行的activity ,任务栈空了


线程是运行在进程里的,当一个应用程序按返回键后,任务栈被清空,变成一个空进程,很容易被回收,里面的子线程也停止了。因此如果有需要长期后台运行的组件,不要在activity 开启子线程,应该创建服务,在服务里面开启子线程,这样优先级就变高了。


服务的目的:
1.长期后台运行。
2.提高进程的优先级,系统不容易回收掉进程,即便回收了,内存充足的时候,会把进程重新创建。

由于服务没有界面,因此生命周期也更简单,只有onCreat() onStartCommand() onDestroy()三个方法。


服务的生命周期:

一、采用start的方式开启服务 
生命周期如下:
                                               onStart()过时了
开启服务: onCreate()--> onStartCommand()  ---> onDestory();

如果服务已经开启,不会重复的执行onCreate(), 而是会调用onStart()和 onStartCommand();

服务停止的时候 onDestory().

服务只会被停止一次


二、服务还有一种开启方式,绑定的方式开启服务。
onCreate() --->onBind();--->onunbind()-->onDestory();
绑定服务不会调用onstart或者onstartcommand方法;


混合调用的服务的生命周期:
服务长期后台运行,又想调用服务的方法:
1.start方式开启服务(保证服务长期后台运行)
2.bind方式绑定服务(保证调用服务的方法)
3.unbind解除绑定服务
4.stopService停止服务。

三、两种开启服务方法的区别。

start方式开启服务。 一旦服务开启跟调用者(开启者)就没有任何关系了。
开启者退出了,开启者挂了,服务还在后台长期的运行。
开启者没有办法去调用服务里面的方法。(美国的司法独立)不能通过new一个service来调用service里面的方法,只能通过系统框架(activity)开启service。

bind的方式开启服务,绑定服务,调用者挂了,服务也会跟着挂掉。不求同时生,但求同时死。
开启者可以调用服务里面的方法。


bind方式绑定服务过程如下:

1.新建一个sevice类,里面建立一个内部类A继承Binder,包含调用service里面方法的方法。

2.利用service里面的onBind方法返回1中的内部类A对象。

3.在activity的bind方法中采用绑定的方式去开启服务,

Intent intent = new Intent(this,MyService.class);
    conn = new MyConn();
    bindService(intent, conn, BIND_AUTO_CREATE);

conn为4中的类的对象。

4.写一个类继承ServiceConnection类,里面实现onServiceConnected方法(方法中需要获取A对象),还需要实现onServiceDisconnected方法。

5.利用4中的A的对象调用服务里面的方法。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值