首先申明,要搞流氓软件请绕路,我们今天讲的是正常应用的需求。我们知道,通过android手机在锁屏、HOME键,菜单键选择了别的App后,先前用户正在看的App就看不见了,退到了后台,android系统不会马上关闭这些后台的App,而是在系统认为合适的时候,才会去关闭它,比如系统发现手机内存不够了。
那么,有没有办法,不让系统关闭我们已经处于后台工作的App呢?比如一个骑行软件,这种app要求用户锁屏后,后台要一直运行,用来记录用户的定位数据,形成一条完整的骑行路线,以便用户随时查看自己的历史骑行轨迹,这就涉及到App要在后台一直运行,否则用户辛辛苦苦骑行的数据就容易丢失。严格意义讲,系统拥有最高权限,它硬要关闭你的App,你是无能为力的,下面要讲述的方法只是让你处于后台的App能尽量不被系统关闭。
一、前台服务
App可以通过注册一个前台服务Forground Service,开启了前台服务的App优先级要更高。Google官方为了应对流氓软件,在安卓4.3以上的系统的通知栏上会显示“XX正在后台运行”,这对正常App基本没有什么影响,用户本来就知道我们App在后台跑。
二、独立进程
App可以开启一个独立进程,来运行需要跑在后台的功能。android系统关闭后台会选择占用资源比较多的优先释放。因此这个做法要注意,在这个进程独立运行的功能要精炼,类似一个很小的独立的服务,这样即使主进程被系统关闭,这个独立进程还在运行。当然,你可以设置进程相互唤醒的机制来提高App驻留内存的几率。独立进程最大的问题是,它与主进程之间的数据通信。
三、透明悬浮窗
我们知道,App可以在安卓系统中显示悬浮窗,开启悬浮窗的App不会被系统随便清理掉。因此,可以设置一个大小为1像素的透明悬浮窗,这样用户是看不到的。App退到后台后,由于有悬浮窗的存在,进程也得以保留。这个方法也已经被Google所察觉,在新版的安卓系统以及很多第三方ROM中,App已经不能随便申请到悬浮窗的权限。
四、播放音频
咋一看这个标题很奇怪,其实一点都不会。我们听音乐的时候,经常都要锁屏在后台播放音乐,但是我们很少说,听一半音乐会被系统关掉。这说明音乐播放在后台是拥有很高权限的,系统是轻易不会关闭的。那么,我们要怎么做呢?可以先找一个没有声音的音乐文件,比如xxx.mp3,然后App内开启一个播放器,循环播放这个音乐文件。当我们App退到后台之后,因为还有音乐一直在播放,所以系统认为优先级更高,不会轻易关掉。这个方法比上面的方法要有效的多,它最大的缺点是很耗电。一个可行的做法是:在设置里添加一个选择开关,让用户自己选择是否开启。当用户的App在后台比较容易被系统关闭时,就建议用户自己开启这个选项,但同时警告说会比较耗电。这个方法有点流氓,非到万不得已,不建议使用。
当然,根据系统会优先关闭占用资源的后台App的特点,还有一些技巧,比如图片、音视频资源没用了,要尽快从内存中释放;耗电大的功能也要适时关闭等等,就不一一列举了。