Мое приложение выполняет довольно простую задачу - оно собирает cellInfo, извлекает номер cid вышки сотовой связи и помещает его в основное действие, когда есть текстовое представление с каким-либо журналом идентификаторов ячеек. Каждый клетид собирает один раз в 2 секунды. Эта функция хранится в Intent Service, а также каждый раз, когда пользователь начинает регистрироваться, появляется уведомление.
Недавно я обнаружил, что, несмотря на то, что в текущем состоянии есть Thread.sleep(1000L)
l oop Некоторые смартфоны не поддерживают работу сервиса корректно. Т.е. когда я выключаю экран, Служба намерений перестает работать, но уведомление все еще присутствует. Иногда я замечал, что некоторые телефоны запускают функцию получения сотовых телефонов намного медленнее, игнорируя метод сна. Но когда я запускаю приложение с подключенным зарядным устройством, все работает нормально на каждом телефоне. Не уверен, что это все о зарядке, но мне нужно, чтобы задержка была одинаковой на нескольких телефонах.
Вот что я пробовал.
Работает на разных телефонах на разных скоростях
fun counter(bc: Intent){
val tm = getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
var quit = 0
var i = 0
do {
i += 1
quit = Trigger.getTrigger() // companion object
val num_cid = getcids(tm) // function that takes cell tower cid (int)
bc.putExtra(PARAM_OUT_MSG, num_cid .toString()) // sending cid to broadcastIntent
sendBroadcast(bc)
Thread.sleep(1000)
}
while (quit == 0)
}
Работает лучше, но уведомление не появляется .
fun counter(bc: Intent){
val tm = getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
Handler().postDelayed(object : Runnable {
override fun run() {
if (Trigger.getTrigger() == 0) {
i += 1
val num_cid = getcids(tm)
bc.putExtra(CURRENT_CID, num_cid .toString())
sendBroadcast(bc)
handler.postDelayed(this, 1000)
}
}
}, 0)
}
Что нужно сделать здесь, чтобы обеспечить одинаковую скорость на каждом телефоне и представленном уведомлении?