Я сделал Сервис, который на самом деле является простым фоновым счетчиком.
Он просто добавляет 1 к последнему номеру и затем переходит к пользовательскому интерфейсу.
Моя предыдущая проблема заключалась в том, что Handler () иногда работал очень медленно, когда смартфон был выключен или если он не заряжается Недавно я обнаружил такую же проблему на этом форуме . Я добавил PowerManager.WakeLock
к своему Сервису, и все работало нормально ...
Но я решил протестировать его дольше и запустил приложение одновременно на трех смартфонах и оставил их примерно на полтора часа. Когда я вернулся, я увидел полную разницу между тремя из них.
Первый показывает 5100 (1 ч 25 минут), второй - 2800 (46 минут) и третий - 5660 (1 ч 34 минуты) , Я был почти уверен, что wakelock выполнит эту работу правильно, но теперь я не знаю, что там произошло.
Вот код моей службы:
class Timer_Service : Service() {
companion object {
val PARAM_OUT_MSG = "0"
}
var i = 0
private lateinit var wakeLock: PowerManager.WakeLock
private lateinit var mHandler: Handler
private lateinit var mRunnable: Runnable
override fun onBind(p0: Intent?): IBinder? {
TODO("not implemented")
}
override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int {
val powerManager = getSystemService(Context.POWER_SERVICE) as PowerManager
wakeLock = powerManager.newWakeLock(
PowerManager.PARTIAL_WAKE_LOCK,
"ExampleApp:Wakelock"
)
wakeLock.acquire()
val broadcastIntent = Intent()
broadcastIntent.action = "com.example.infocell.action.RESPONSE"
mHandler = Handler()
mRunnable = Runnable {
showOrderNumber()
broadcastIntent.addCategory(Intent.CATEGORY_DEFAULT)
broadcastIntent.putExtra(PARAM_OUT_MSG, i.toString())
sendBroadcast(broadcastIntent)
}
mHandler.postDelayed(mRunnable, 1000)
return START_NOT_STICKY
}
override fun onDestroy() {
super.onDestroy()
mHandler.removeCallbacks(mRunnable)
}
private fun showOrderNumber() {
i += 1
mHandler.postDelayed(mRunnable, 1000)
}
}
Манифест также содержит <uses-permission android:name="android.permission.WAKE_LOCK" />