草庐IT

android - JobScheduler 的问题 - JobsService 多次触发

coder 2023-12-24 原文

我正在尝试在我的 android 应用程序中做一些后台工作。正如网络建议的那样,我正在使用 JobScheduler 来执行此操作。

作业有时会触发 5-15 次 而不是一次。有时他们从不开火。 我的测试设备在 5.1.1 和 7.0 上运行。牛轧糖的火力远低于 Lollipop 的火力。

这就是我启用作业的方式(5 秒间隔仅用于测试目的):

fun enableTasks() {
    val jobScheduler = App.getContext().getSystemService(Context.JOB_SCHEDULER_SERVICE) as JobScheduler

    if (PreferenceDao.getInstance().shouldUpdateJob()) jobScheduler.cancelAll()

    scheduleJob(jobScheduler, MoniInfoJob.getJob())
    scheduleJob(jobScheduler, QueueJob.getJob())
    scheduleJob(jobScheduler, MontageOrderUpdateJob.getJob())

    PreferenceDao.getInstance().setJobUpdated()
}

private fun scheduleJob(jobScheduler: JobScheduler, jobInfo: JobInfo) {
    val jobExists = jobScheduler.allPendingJobs.any { it.id == jobInfo.id }
    if (!jobExists) jobScheduler.schedule(jobInfo)
}

这三份工作看起来都差不多,所以我只发一份:

JobService

class QueueJob : JobService() {

override fun onStartJob(jobParameters: JobParameters?): Boolean {
    val receiver = object : BroadcastReceiver() {
        override fun onReceive(context: Context?, p1: Intent?) {
            unregisterBroadcastReceiver(this)
            jobFinished(jobParameters, false)
        }
    }

    registerBroadcastReceiver(receiver)
    MainController.startQueueService()
    return true;
}

override fun onStopJob(jobParameters: JobParameters): Boolean {
    Log.d(MontageOrderUpdateJob.TAG, "onStopJob")
    return false;
}

private fun registerBroadcastReceiver(receiver: BroadcastReceiver) {
    LocalBroadcastManager.getInstance(this).registerReceiver(receiver, IntentFilter(JOB_FINISHED))
}

private fun unregisterBroadcastReceiver(receiver: BroadcastReceiver) {
    LocalBroadcastManager.getInstance(this).unregisterReceiver(receiver)
}



companion object {
    val TAG = QueueJob::class.java.name
    val jobId: Int = 2
    val JOB_FINISHED =  TAG + "_finished"

    fun getJob(): JobInfo {
        val builder = JobInfo.Builder(jobId, ComponentName(App.getContext(), TAG))
        builder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
        builder.setPeriodic(5000L)
        builder.setPersisted(true)
        return builder.build()
    }
}
}

JobIntentService:

class QueueService : JobIntentService() {

private val TAG = QueueService::class.java.name

override fun onHandleWork(intent: Intent) {
    try {
        Log.d(TAG, "Jobservice started")
        TimerecordQueue().workThroughQueue()
        DangerAllowanceQueue().workThroughQueue()
        ProjektEndQueue().workThroughQueue()
        PhotoUploadQueue().workThroughQueue()
    } finally {
        sendFinishedBroadcast()
    }
}

private fun sendFinishedBroadcast() {
    val jobFinishedIntent = Intent(QueueJob.JOB_FINISHED)
    LocalBroadcastManager.getInstance(this).sendBroadcast(jobFinishedIntent)
}
}

最佳答案

我曾经遇到过类似的问题。我当时的问题是我没有检查预先存在的时间表。 您是否也需要这样做?

关于android - JobScheduler 的问题 - JobsService 多次触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47635731/

有关android - JobScheduler 的问题 - JobsService 多次触发的更多相关文章

  1. ruby - 在 64 位 Snow Leopard 上使用 rvm、postgres 9.0、ruby 1.9.2-p136 安装 pg gem 时出现问题 - 2

    我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po

  2. ruby - 多次弹出/移动 ruby​​ 数组 - 2

    我的代码目前看起来像这样numbers=[1,2,3,4,5]defpop_threepop=[]3.times{pop有没有办法在一行中完成pop_three方法中的内容?我基本上想做类似numbers.slice(0,3)的事情,但要删除切片中的数组项。嗯...嗯,我想我刚刚意识到我可以试试slice! 最佳答案 是numbers.pop(3)或者numbers.shift(3)如果你想要另一边。 关于ruby-多次弹出/移动ruby​​数组,我们在StackOverflow上找到一

  3. ruby - 通过 rvm 升级 ruby​​gems 的问题 - 2

    尝试通过RVM将RubyGems升级到版本1.8.10并出现此错误:$rvmrubygemslatestRemovingoldRubygemsfiles...Installingrubygems-1.8.10forruby-1.9.2-p180...ERROR:Errorrunning'GEM_PATH="/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/ruby-1.9.2-p180@global:/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/rub

  4. ruby - 通过 RVM (OSX Mountain Lion) 安装 Ruby 2.0.0-p247 时遇到问题 - 2

    我的最终目标是安装当前版本的RubyonRails。我在OSXMountainLion上运行。到目前为止,这是我的过程:已安装的RVM$\curl-Lhttps://get.rvm.io|bash-sstable检查已知(我假设已批准)安装$rvmlistknown我看到当前的稳定版本可用[ruby-]2.0.0[-p247]输入命令安装$rvminstall2.0.0-p247注意:我也试过这些安装命令$rvminstallruby-2.0.0-p247$rvminstallruby=2.0.0-p247我很快就无处可去了。结果:$rvminstall2.0.0-p247Search

  5. ruby - Fast-stemmer 安装问题 - 2

    由于fast-stemmer的问题,我很难安装我想要的任何ruby​​gem。我把我得到的错误放在下面。Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingfast-stemmer:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcreatingMakefilemake"DESTDIR="cleanmake"DESTDIR=

  6. ruby - 触发器 ruby​​ 中 3 点范围运算符和 2 点范围运算符的区别 - 2

    请帮助我理解范围运算符...和..之间的区别,作为Ruby中使用的“触发器”。这是PragmaticProgrammersguidetoRuby中的一个示例:a=(11..20).collect{|i|(i%4==0)..(i%3==0)?i:nil}返回:[nil,12,nil,nil,nil,16,17,18,nil,20]还有:a=(11..20).collect{|i|(i%4==0)...(i%3==0)?i:nil}返回:[nil,12,13,14,15,16,17,18,nil,20] 最佳答案 触发器(又名f/f)是

  7. ruby-on-rails - Rails - 乐观锁定总是触发 StaleObjectError 异常 - 2

    我正在学习Rails,并阅读了关于乐观锁的内容。我已将类型为integer的lock_version列添加到我的articles表中。但现在每当我第一次尝试更新记录时,我都会收到StaleObjectError异常。这是我的迁移:classAddLockVersionToArticle当我尝试通过Rails控制台更新文章时:article=Article.first=>#我这样做:article.title="newtitle"article.save我明白了:(0.3ms)begintransaction(0.3ms)UPDATE"articles"SET"title"='dwdwd

  8. ruby - 安装 Ruby 时遇到问题(无法下载资源 "readline--patch") - 2

    当我尝试安装Ruby时遇到此错误。我试过查看this和this但无济于事➜~brewinstallrubyWarning:YouareusingOSX10.12.Wedonotprovidesupportforthispre-releaseversion.Youmayencounterbuildfailuresorotherbreakages.Pleasecreatepull-requestsinsteadoffilingissues.==>Installingdependenciesforruby:readline,libyaml,makedepend==>Installingrub

  9. ruby-on-rails - 如何在 Rails Controller Action 上触发 Facebook 像素 - 2

    我有一个ruby​​onrails应用程序。我按照facebook的说明添加了一个像素。但是,要跟踪转化,Facebook要求您将页面置于达到预期结果时出现的转化中。即,如果我想显示客户已注册,我会将您注册后转到的页面作为成功对象进行跟踪。我的问题是,当客户注册时,在我的应用程序中没有登陆页面。该应用程序将用户带回主页。它在主页上显示了一条消息,所以我想看看是否有一种方法可以跟踪来自Controller操作而不是实际页面的转化。我需要计数的Action没有页面,它们是ControllerAction。是否有任何人都知道的关于如何执行此操作的gem、文档或最佳实践?这是进入布局文件的像素

  10. java - 从 JRuby 调用 Java 类的问题 - 2

    我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www

随机推荐