【发布时间】:2018-07-20 04:43:10
【问题描述】:
我创建了一个使用 Firebase 服务的应用。每当值发生变化时,都会生成通知。所以为此,我的服务必须持续运行,否则不会有通知。我确实创建并成功地让它在 pre-oreo Android OS 中运行。即使在从最近清除并强制关闭但不是在奥利奥中之后,我的服务也能完美运行。 谷歌搜索后,我了解到禁止在 Oreo 中自动启动服务。为此,我们需要 JobScheduler。
这是我的 JobService 类-
import android.app.job.JobParameters;
import android.app.job.JobService;
import android.content.Intent;
import android.os.Build;
import android.support.annotation.RequiresApi;
import android.util.Log;
@RequiresApi(api = Build.VERSION_CODES.O)
public class Serviceo extends JobService {
private JobParameters params;
@Override
public boolean onStartJob(JobParameters jobParameters) {
this.params = jobParameters;
Log.d("HEYY","i'm here");
Intent service = new Intent(getApplicationContext(), NotificationService.class);
getApplicationContext().startService(service);
return true;
}
@Override
public boolean onStopJob(JobParameters jobParameters) {
return false;
}
}
PS- 扩展 JobService 给出了需要 min api=21 的错误,所以我使用 @RequiresApi(api = Build.VERSION_CODES.O)
对其进行了纠正在我的 Service 的 onDestroy 方法中,我这样声明了我的 JobService-
@Override
public void onDestroy() {
super.onDestroy();
Log.i("EXIT", "ondestroy!");
Intent broadcastIntent = new Intent("com.mukesh.mu.RestarterBroadcastReceiver");
sendBroadcast(broadcastIntent);
stoptimertask();
Log.i("BRUHHH","hi");
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
Log.i("BRUHHH","hi2");
jobScheduler = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE);
JobInfo.Builder builder = new JobInfo.Builder(1, new ComponentName(getPackageName(),
Serviceo.class.getName()));
//run job service after every 5 seconds
builder.setPeriodic(5000);
jobScheduler.schedule(builder.build());
}
此方法已执行,但服务未启动。我可以在 logcat "hi2" 中看到执行。 我也在清单中声明了它
<service
android:name="com.mukesh.mu.Serviceoreo"
android:permission="android.permission.BIND_JOB_SERVICE"
/>
在通过 Intent 和广播构建的 pre-Oreo 中一切正常,但在 Oreo 中不工作。
【问题讨论】:
-
类名
Serviceo与清单中声明的Serviceoreo不同。 -
A
JobServiceis Not a Visible Process 。如果您没有Visible进程,您将无法启动Service。阅读developer.android.com/about/versions/oreo/background。
标签: android service android-8.0-oreo android-jobscheduler