1.描述问题:
【用于科研,非商业】安卓应用开发,需要保持应用长时间运行获取定位信息,应用开启后启动Activity,然后启动Service,保持Service一直在后台运行。考虑到我们是请一些人帮忙装上应用的,所以主要是想让用户将应用添加到保护名单中,来保证应用正常运行时能够长不被清理掉。
【功能】Service做的事情包括:监听亮屏息屏、获取加速度传感器数据、调用百度SDK获取定位(由于GPS耗电量大,目前一直仅用wifi、基站等较低功耗的定位方式在测试)、操作SQLite数据库、Service中开启一个Thread每隔20s查询下数据库,数据足够量如10条时发送数据到服务器,handler回调。
【ps】Service持有了PARTIAL_WAKE_LOCK,CPU电源锁。
【服务保活】使用了:1.保持前台Notification;2.在手机中添加到加速白名单、应用后台保护,从而防住了锁屏几秒就被清理;3. 1像素保活;
【设备】华为荣耀7;型号PLK-TL01H;EMUI4.0.3;安卓6.0;运行内存3.0GB;
2.相关代码:
无。
3.报错信息:
无报错,尝试过Crash时记录下信息,然后下次打开时传输到服务器以便查看crash信息,但是发现没有发送。(这个发送crash信息的功能经人为增加int i=1/0;测试过,能够获取到除数不为0的报错信息)
4.尝试过的方法及反馈:
**1.对比测试**:
1.1 连接电脑,不拔出usb线,一天都不会被退出;
1.2 拔出usb,应用退到后台,保持亮屏,应用大半天都没被退出;
1.3 拔出usb,应用退到后台,息屏,应用普遍半小时到两个多小时内,会被退出;
1.4 尝试过,后台边播放音乐来保活,应用退到后台,息屏,能听到音乐,应用长时间没被退出;
**2.捕获Crash信息:**
测试并使用了捕获Crash信息然后发送到服务器,发现运行一段时间然后被退出的情况下,不会有crash信息被捕获;
**3.思考OOM:**
在思考是否因OOM导致内存不足而退出应用,但是似乎不像是这个原因,理由如下:1.没有crash信息;2.连接usb线运行一天也没有发现OOM;3.保持亮屏时长时间也没有被退出;
5.相关截图:
无。
6.提问及思考,求解疑:
Q1.什么原因,会导致应用在连接usb或者直接亮屏时能够持续运行,而息屏后被退出却捕获不到crash信息?
A1:似乎并非OOM,而是被系统清理掉。
Q2:以上表现是否验证了“应用被系统清理掉”的假设?如果是被系统清理掉,那么能导致被系统清理掉的原因有哪些(梳理总结)?
A2:当前觉得,是否是因为耗电量太大,导致应用会运行一段时间后被清理?并且这种清理是添加到内存加速白名单、应用后台保护,后仍然会生效的、能够清掉应用的?