【问题标题】:Unable to start Service via JobScheduler in Android Oreo无法通过 Android Oreo 中的 JobScheduler 启动服务
【发布时间】: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 中不工作。

【问题讨论】:

标签: android service android-8.0-oreo android-jobscheduler


【解决方案1】:

您可以尝试替代 Job Service-Firebase JobDispatcher

【讨论】:

    猜你喜欢
    • 2016-09-06
    • 1970-01-01
    • 2018-12-23
    • 2023-03-31
    • 2019-01-23
    • 1970-01-01
    • 2016-04-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多