android服务---Service

service服务四大组件之一,和Activity的级别一样而且都是运行在主线程中,所以在service里面不能直接做一些比较耗时的事情,只能开子线程处理。

什么时候用service

service是在后台运行的,也就是无界面运行。像音乐播放器就是典型的后台运行的。

service的启动方式和相应的关闭方式

1、context.startService()

a、service启动之后的整个的一个完整生命流程是onCreate()——>onStartCommand()——->onDestroy()。
b、当调用了startService启动之后,再次调用startService是不会再开启service的。只会再次调用onStartCommand()方法。
c、调用stopService(),关闭启动的service(不管启动过多少次)或者service自己调用stopSelf()进行关闭。
d、这种方式启动的service不会因为启动它的Activity关闭而关闭,需要去调用相应的方法去关闭。

2、context.bindservice()

a、启动之后的整个的一个完整生命流程是onCreate()—->onBind()——->onUnBind()—–>onDestory()。
b、这种方式启动的service它的存在和销毁是和启动它的Activity绑定的,即启动的Activity销毁了那么这个sevice也就销毁了。
c、调用unBindService()解除和Activity的绑定关闭

service和activity之间的交互

1、广播:通过广播的方式可以在service和activity之间进行双向的实时交互。
2、只在bindService启动方式中使用的回调交互,调用bindService的时候需要传个ServiceConnection,可以通过这个ServiceConnection进行交互

如何让service尽量不被kill
1、设置service的优先级:1000是最大的,1是最小的(还是会被kill掉)

 <intent-filter android:priority="1000" >

2、将服务设置成前台服务(还是会被kill掉);
在service中执行

Notification notification = new Notification(R.drawable.img2,"", System.currentTimeMillis());  
Intent notificationIntent = new Intent(this, MainActivity.class);  
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,notificationIntent, 0);  
notification.setLatestEventInfo(this, title, "",pendingIntent);  
startForeground(id, notification);//id 为0 表示隐藏 其他表示显示

3、把service写成系统服务,将永远不会被回收(没有试过):
在Manifest.xml文件中设置persistent属性为true,如果系统服务太多将严重影响系统的整体运行效率。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值