如何解决Android Workmanager最小间隔解决方法
我正在使用工作管理器在后台运行服务,距文档的最小间隔为15分钟,但我希望间隔为2分钟。
我尝试了这段代码,它在从android studio调试时可以正常工作,并且每两分钟可以正常运行,但是一旦我拔下电缆,或者直接通过apk部署它,它只能运行一次并停止运行。
在主要活动onCreate / onResume中:
OneTimeWorkRequest oneTimeRequest = new OneTimeWorkRequest.Builder(CallAndSmsWork.class).addTag(TAG).setInitialDelay(15,TimeUnit.SECONDS).build();
WorkManager.getInstance(getApplicationContext()).enqueueUniqueWork("CallnSms",ExistingWorkPolicy.REPLACE,oneTimeRequest);
CallAndSmsWork服务的DoWork方法结尾:
OneTimeWorkRequest oneTimeRequest = new OneTimeWorkRequest.Builder(CallAndSmsWork.class).setInitialDelay(120,TimeUnit.SECONDS).addTag(TAG).build();
WorkManager.getInstance(getApplicationContext()).enqueueUniqueWork("CallnSms",oneTimeRequest);
是否有我做错的事情,或者是否有其他选择可使服务每两分钟正确运行一次?
P.S .:我在android 10上,一加6t
解决方法
在2分钟的间隔内,您可以使用定期运行的程序,例如:
private val runnable = object : Runnable {
val periodInMillis = 2 * 60 * 1000L
override fun run() {
Log.d(DEBUG_TAG,"Runnable scheduled")
// Do stuff
mHandler?.postDelayed(this,periodInMillis)
}
}
并将其发送到处理程序线程:
//Threading madness
private var mThread: HandlerThread? = null
private var mHandler: Handler? = null
比您可以初始化:
//Prepare Thread
if (mThread == null) {
mThread = HandlerThread("HeartBeatThread",Process.THREAD_PRIORITY_BACKGROUND)
mThread!!.start()
}
if (mHandler == null) mHandler =
Handler(mThread!!.looper) //Blocks until looper is prepared,which is fairly quick
mHandler!!.post(runnable)
通过这种方式,您可以使自己排入队列并每2分钟运行一次任务。问题可能出在打mode模式,与Android处理省电模式有关。为此,我猜你可以拿起一把锁。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。