android 后台应用进程在“当前运行的进程”中

[b]问题[/b]
最近工作用用到了异步service的异步进程间通信,这里不讲这个,要讲的是,开发过程中,有个需求是让我们的apk一直运行在设置->应用程序管理->当前运行的进程中而不是缓存进程中。以前没注意过走一些弯路。[color=red]遇到的问题是以startservice方式启动service当程序后台运行时,查看程序状态程序处于当前运行状态。当已bindservice方式启动service程序进入后台运行时,查看程序状态处于缓存进程中。[/color]

[b]基础知识[/b]
1:Service的生命周期方法
onCreate, onStart, onDestroy

[b]2:service启动方式[/b]
startService 和 bindService
Service会经历 onCreate --> onStart,stopService的时候直接onDestroy,如果是 调用者 直接退出而没有调用stopService的话,[color=red]Service会一直在后台运行。即调用者与服务之间没有关连,即使调用者退出了,服务仍然运行。[/color]下次调用者再起来仍然可以stopService

bindService只会运行onCreate, 这个时候[color=red] 调用者和Service绑定在一起,调用者退出了,Srevice就会调用onUnbind-->onDestroyed所谓绑定在一起就共存亡了[/color]。

[b]3:注意[/b]
[color=blue]Service的onCreate的方法只会被调用一次,[/color]
就是你无论多少次的startService又 bindService,Service只被创建一次。
[color=blue]如果先是bind了[/color],那么start的时候就直接运行Service的onStart方法,
[color=blue]如果先是start,[/color]那么bind的时候就直接运行onBind方法。如果你先bind上了,就stop不掉了,只能先UnbindService, 再StopService,所以是先start还是先bind行为是有区别的。
  如果打算采用Context.startService()方法启动服务,在服务未被创建时,系统会先调用服务的onCreate()方法,
  接着调用onStart()方法。如果调用startService()方法前服务已经被创建,多次调用startService()方法并不会导致多次创建服务,
  但会导致多次调用onStart()方法。采用startService()方法启动的服务,只能调用Context.stopService()方法结束服务,服务结束时会调用onDestroy()方法。
  如果打算采用Context.bindService()方法启动服务,在服务未被创建时,系统会先调用服务的onCreate()方法,
  接着调用onBind()方法。这个时候调用者和服务绑定在一起,调用者退出了,系统就会先调用服务的onUnbind()方法,
  接着调用onDestroy()方法。如果调用bindService()方法前服务已经被绑定,
  多次调用bindService()方法并不会导致多次创建服务及绑定(也就是说onCreate()和onBind()方法并不会被多次调用)。
  如果调用者希望与正在绑定的服务解除绑定,可以调用unbindService()方法,调用该方法也会导致系统调用服务的onUnbind()-->onDestroy()方法.

[b]解决方案[/b]
注意红字部分,相信大家应该明白了吧,startService方式启动的service与启动它的应用无关联,所以当应用进入到后台时service仍然在运行,所以该程序的进程在“当前运行”栏中,而bindService启动的service是应用绑定的同生共死,即应用退出了服务也就退出了,所以当应用线程会在“缓存进程”中。
[color=green]方案一:[/color]如果不需要与服务交互,通过startService方式启动即可。
[color=green]方案二:[/color]如果需要与服务交互,则先通过bindservice方式绑定服务,再通过startService方式启动。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值