标签: jobservice

从后台删除应用程序时如何停止JobService Scheduled?

目前,我正在使用一个应用程序,并且我的应用程序具有用户可以单击“导航”按钮并且我的应用程序将启动Google Map的功能。到现在为止一切都很好,我已经做到了。但是,我被困的事实是我希望我的应用执行某些任务。为此,我使用了JobService并将其安排为每5秒运行一次,即使该应用程序处于后台也是如此。

当用户按下后退按钮时,则在onDestroy方法内部,我已取消了调度程序。但是,当通过滑动或按下十字图标将应用程序从后台删除时,JobService会继续运行,因为从后台删除应用程序时,os可以调用onDestroy方法。从后台删除应用程序后,如何停止计划的工作?

在此处输入图片说明

在此处输入图片说明

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="javarank.com.serviceinbackground">

    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <service android:name=".MyJobService" android:exported="true" android:permission="android.permission.BIND_JOB_SERVICE" />

    </application>

</manifest>
Run Code Online (Sandbox Code Playgroud)

MyJobService类别

public class MyJobService extends JobService {

    @Override
    public boolean onStartJob(final JobParameters jobParameters) {
        Toast.makeText(getApplicationContext(), "Doing job", Toast.LENGTH_SHORT).show();
        jobFinished(jobParameters, true);
        return false;
    }

    @Override
    public boolean onStopJob(JobParameters jobParameters) {
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的MainActivity

public class MainActivity extends AppCompatActivity …
Run Code Online (Sandbox Code Playgroud)

java android google-maps jobservice

5
推荐指数
1
解决办法
3271
查看次数

java.lang.IllegalArgumentException:当Or在整个应用程序中使用唯一的作业ID时,Oreo中的给定工作不是活动异常

如何处理这种异常?我在整个应用程序中使用唯一的工作ID时,Oreo中的给定工作不是活动异常。

java.lang.RuntimeException: An error occurred while executing doInBackground()  
        at android.os.AsyncTask$3.done(AsyncTask.java:353)
        at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:383)
        at java.util.concurrent.FutureTask.setException(FutureTask.java:252)
        at java.util.concurrent.FutureTask.run(FutureTask.java:271)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
        at java.lang.Thread.run(Thread.java:764)
Caused by: java.lang.IllegalArgumentException: Given work is not active: JobWorkItem{id=2 intent=Intent { cmp=com.virinchi.mychat/com.virinchi.receiver.AnalysticsSubmit } dcount=1}
        at android.app.job.JobParameters.completeWork(JobParameters.java:221)
        at android.support.v4.app.JobIntentService$JobServiceEngineImpl$WrapperWorkItem.complete(JobIntentService.java:267)
        at android.support.v4.app.JobIntentService$CommandProcessor.doInBackground(JobIntentService.java:393)
        at android.support.v4.app.JobIntentService$CommandProcessor.doInBackground(JobIntentService.java:382)
        at android.os.AsyncTask$2.call(AsyncTask.java:333)
        at java.util.concurrent.FutureTask.run(FutureTask)
Run Code Online (Sandbox Code Playgroud)
public class AnalysticsSubmit extends JobIntentService {
    private static String TAG = "AnalysticsSubmit";


    /**
     * Unique job ID for this service.
     */

    /**
     * Convenience method for enqueuing work in to this service. …
Run Code Online (Sandbox Code Playgroud)

java android kotlin jobservice jobintentservice

5
推荐指数
0
解决办法
772
查看次数

如果我不为 JobService 调用 jobFinished 会发生什么?

出于兴趣并更好地理解错误场景:我有一个JobService. 在onStartJob我返回true通知JobManager有额外的工作。Android 文档提到我需要打电话jobFinished通知JobManager工作已完成。

现在我想知道(并且可能有一个基于此的错误):如果我从不打电话会发生什么jobFinished?Android 会在某个时候终止作业服务吗?它会允许生成 JobService 的新实例吗?还是会阻止其他服务启动?是否有最大数量的 JobService 可以共存?

android jobservice

4
推荐指数
1
解决办法
1567
查看次数

Android:如何使用JobService的JobFinished

我没有看到使用JobService的jobFinshed的示例,似乎我们必须在满足某些条件时跟踪更改,我们必须调用jobFinished()method,对吗?

java android android-jobscheduler jobservice

4
推荐指数
2
解决办法
6192
查看次数

Dagger2:如何解决 JobService?

我正在尝试更新我的简单 android 应用程序以使用 Dagger2。我想我已经设法理解了一些基础知识,并且正在通过它创建基本的东西(活动、视图模型、助手)。

现在,还有一个小问题:该应用程序有一个按钮,按下该按钮后,必须安排作业服务。我可以重构我的 jobservice 以便它的依赖项通过它的构造函数传递,但是我如何从我的活动中实例化它?换句话说,我如何替换此代码:

    val serviceComponent = ComponentName(getApplication(), DbUpdaterJob::class.java)
    var jobInfo = JobInfo.Builder(DB_UPDATER_JOB_ID, serviceComponent)
            .setRequiredNetworkType(networkType)
            .setPersisted(true)
            .build()

    val scheduler = getApplication<Application>().getSystemService(Context.JOB_SCHEDULER_SERVICE) as JobScheduler
    val res = scheduler.schedule(jobInfo)
Run Code Online (Sandbox Code Playgroud)

所以实例化被降级为匕首?

谢谢!

android kotlin dagger-2 jobservice

2
推荐指数
1
解决办法
963
查看次数

Android O 中的 OnTaskRemoved

在我的 android 应用程序中,我有一个Service在应用程序进入后台时启动的应用程序。OnStartCommand开始分析和检查设备和应用程序状态的长时间运行的任务。

现在,我正在为 Android O 准备应用程序。我面临的第一个问题是Services,我将它们重新编写为JobServices.

现在我面临另一个问题。当用户从应用程序堆栈JobService.OnTaskRemoved中删除我的应用程序时不会被调用。

之前,当我使用Service调用时Service.OnTaskRemoved对我来说工作正常。

现在我看到了唯一的方法。我需要我的旧Service用于处理Service.OnTaskRemoved和新的JobServices用于执行任务。

我错了吗?也许有人可以给我很好的建议?

service android xamarin jobservice android-8.1-oreo

1
推荐指数
1
解决办法
6255
查看次数