我现在做了个app,期望他始终在后台运行,并通过一个线程和服务器进行心跳,已实现的大略如下:
1、创建了一个MyService类
2、在MainActivity onCreate时:
1)startService(new Intent(this, MyService .class)); 将MyService启动
2)设置一个定时alarm 不断启动这个MySercice
Intent intentAlarm2 = new Intent(this, MyService.class);
PendingIntent sender2 = PendingIntent.getService(this, 0, intentAlarm2, 0);
AlarmManager alarmManager2 = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager2.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 60 * 1000, sender2);
3、在MyService类的OnStartCommand里,启动了一个线程,该线程每隔一定时间和服务器心跳一次
4、在MyService类的OnStartCommand里,创建并绑定了一个notification,并将该service设置为前台程序 startForeground(0x1982, notification);
5、该MyService类的OnStartCommand返回 return START_STICKY_COMPATIBILITY;
6、在MyService类的onDestroy()里重载并执行重新创建MyService并启动
7、启动app已经拿到后台运行权限ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
现在的问题是:
1、app可以再后台持续运行一段时间,大约是4个小时,通过线程定时打印可以看到在后台运行情况
2、状态栏也存在由MyService创建的notifycation图标
3、大约4小时候,服务和线程停止,没有报错,也没有进入onDestroy()入口。手机上能看到应用程序的任务在后台,但是线程和服务没有了,应该是主进程没有被杀。
4、有一个另外的三方app(非白名单)却可以实现一直不被杀掉。所以,怀疑还有其他方案可以保证不被杀掉
望采纳。。
最正确的后台保活方案:http://t.csdn.cn/Lg9JM
不知道你这个问题是否已经解决, 如果还没有解决的话: