在我的android应用程序中,我每天下午5点跟踪用户位置,并将该位置发送到服务器。为此,我运行一个服务。但我的问题是,如果应用程序处于前台模式,服务就会启动。但如果应用程序处于后台模式超过10分钟或下一个日期。则服务未启动。下面是我的服务启动代码。
Log.d("Service log","service will start");
if( (ContextCompat.checkSelfPermission(context,
Manifest.permission.ACCESS_FINE_LOCATION)) ==
PackageManager.PERMISSION_GRANTED){
Intent backgnd = new Intent(context, BackgrndService.class);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
try{
Log.d("Service log","service starting in oreo");
context.stopService(backgnd);
context.startForegroundService(backgnd);}
catch(Exception e){
context.startForegroundService(backgnd);
}
}else {
try{
Log.d("Service log","service start");
context.stopService(backgnd);
context.startService(backgnd);}
catch(Exception e){
context.startService(backgnd);
}
}
}else{
Log.d("Service log","NO Access Location permission");
}
在logcat中,我可以看到第一个日志,但其他日志没有显示。请提供如何在后台模式(睡眠模式)下运行该服务的建议。
1条答案
按热度按时间tvmytwxo1#
android操作系统时不时地杀掉后台服务,以节省资源(能源)。所以要避免把它作为前台服务。我会为服务创建一个通知,并指出它是前台(这有两个好处,操作系统不会杀死你的服务,用户也不会试图杀死正在运行的应用程序)。