bindService(Intent service, ServiceConnection conn, int flags)
方法有flag参数,可以控制需要绑定的Service的行为和运行模式,其中BIND_AUTO_CREATE和BIND_WAIVE_PRIORITY两个flag在Ice Cream Sandwich也就是Android4.0版本前后有一些区别,主要是:
在4.0之前,Service的优先级被默认视同后台任务,如果设置了BIND_AUTO_CREATE则Service的优先级将等同于宿主进程,也就是调用bindService的进程。
在4.0及以上就完全变了,Service的优先级默认等同于宿主进程,只有设置了BIND_WAIVE_PRIORITY才会使Service的被当做后台任务对待,WAIVE就是放弃的意思嘛。
基于上述区别,必须对不针对4.0以上开发的的App进行兼容。这种App跑在4.0以上时,bindService的时候没有同时设置BIND_AUTO_CREATE则Service应被视为后台任务,那么BIND_WAIVE_PRIORITY会被偷偷加上去。
下图描述了这种情况,很早之前做的,凑合看:
BIND_AUTO_CREATE和BIND_WAIVE_PRIORITY要点