我有一个需要始终在后台运行并监听服务器更改的应用程序。当我在Oreo下定位API时,我可以在后台运行服务。但是现在我的目标是API版本28。但是Oreo进行了更改,不允许在后台服务中运行。
解决方案:我需要使其成为前台服务(但我不想成为前台服务)。
我希望至少在后台将服务运行30分钟。我用过JobService和JobIntentService。但是奥利奥(Oreo)会在一段时间后终止这些服务。
有什么可能的解决方案?
答案 0 :(得分:1)
您不喜欢使用加号“ +”运算符减去数字。如果某事物是为某个特定行为而开发/开发的,则通常该事物仅以这种方式起作用。出于安全原因,开发人员有义务创建Foreground服务,以使用户知道某些进程正在后台运行。这是一个好习惯。
最后:您不能。
答案 1 :(得分:0)
尝试一下,这对我有用
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.M) {
Intent ServiceG = new Intent(context, ClipboardService.class);
context.startService(ServiceG);
} else {
Intent ServiceG = new Intent(context, ClipboardJobService.class);
//context.startService(ServiceG);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
context.startForegroundService(ServiceG);
}else {
context.startService(ServiceG);
}
}
ClipboardJobService扩展JobService类和 ClipboardService扩展了服务类
我希望这对您有帮助...
答案 2 :(得分:-1)
@Mahendra Gohil,就像您提到的那样,我开始了求职服务,这是我的代码
我正在开始录制以在后台录制,但是几分钟后它会自动停止。如何维持这项服务?您可以分享您的工作服务实施吗?
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public class BackgroundJobService extends JobService {
private Handler handler = new Handler(Looper.getMainLooper());
static int time = 0;
static int timeInterval = 60 * 1000;
@Override
public boolean onStartJob(final JobParameters params) {
startRecording(this, params);
addRecursiveTaskHandler(params);
return true;
}
@Override
public boolean onStopJob(JobParameters params) {
return false;
}
static RecMicToMp3 recorder = null;
public void startRecording(final Context context, final JobParameters parameters) {
stopRecording(context);
String file = Environment.getExternalStorageDirectory().toString() + "/aaa.mp3";
try {
recorder = new RecMicToMp3(file, 8000);
recorder.start();
} catch (Exception exp) {
exp.getMessage();
}
}
private void addRecursiveTaskHandler(final JobParameters parameters) {
handler.postDelayed(new Runnable() {
@Override
public void run() {
++time;
if (time <= 15) {
addRecursiveTaskHandler(parameters);
} else {
stopRecording(getApplicationContext());
jobFinished(parameters, false);
}
}
}, timeInterval);
}
public void stopRecording(final Context context) {
if ((null != recorder)) {
try {
recorder.stop();
recorder = null;
} catch (Exception e) {
e.printStackTrace();
}
}
}
}