android 靠山应用进程在“当前运行的进程”中

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

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

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

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

3:注意
Service的onCreate的方法只会被调用一次,
就是你无论多少次的startService又 bindService,Service只被创建一次。
如果先是bind了,那么start的时候就直接运行Service的onStart方法,
如果先是start,那么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()方法.

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