我有服务
class BusLocationService : Service()
以START_STICKY开头,并显示永久通知。
override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int {
if (intent.action == Constants.ACTION.STARTFOREGROUND_ACTION) {
registerChannel();
showNotification();
}
return START_STICKY
}
private fun showNotification() {
val notification = ...
startForeground(Constants.NOTIFICATION_ID.FOREGROUND_SERVICE,
notification)
}
它应该定期(每分钟一次)执行一些代码,但不是。它只是偶尔执行一次(可能在主要活动可见时)。
private fun startPermissionActivity() {
android.os.Handler().postDelayed(
{
this@BusLocationService.startPermissionActivity()
}, 60000)
}
这个postDelayed
不可靠吗?还是问题出在别的地方?还有什么可以使服务错过计时器?
更新
在家里的仿真器中进行测试(活动可见)时,我确实看到代码每分钟执行一次。在实际设备(OnePlus 3T)上以及活动处于后台时,都会发生此问题。有时(很少)有效,有时(通常)无效。
答案 0 :(得分:0)
您编写的内容只能运行一次,您必须再次从Handler
撤回Runnable
才能使其定期运行
尝试
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
this@BusLocationService.startPermissionActivity()
handler.postDelayed(this,60000);
}
}, 60000);