Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Handler - volá se neustále

Aktivity
Avatar
tknette
Člen
Avatar
tknette:3.6.2019 13:44

Ahoj, snažím se rozchodit handler na ověření oprávnění, ale nějak se mi nedaří zjistit, jestli v handleru takový post nemám a tak neustále přidávám další a další.

Zkusil jsem: Mám třídu HandlerWithId, která dělá z Handleru a ta by měla mít možnost zkontrolovat, jestli už tam daný post nemám, ale nejspíš to nefunguje.

import android.os.Handler
import android.os.Message

class HandlerWithID : Handler() {

    fun postDelayed(r: Runnable, runnableID: Int, delayMillis: Long): Boolean {
        val m = Message.obtain(this, r)
        m.what = runnableID
        return sendMessageDelayed(m, delayMillis)
    }

    fun post(r: Runnable, runnableID: Int): Boolean {
        return postDelayed(r, runnableID, 0)
    }

    fun hasActiveRunnable(runnableID: Int): Boolean {
        return hasMessages(runnableID)
    }
}

Tady to volám:

    private lateinit var handler: HandlerWithID

fun checkPermissionsPeriodically() {
    if(!::handler.isInitialized){
        handler = HandlerWithID()
    }
    val runnableCode = object : Runnable {
        override fun run() {
            if(!handler.hasActiveRunnable(ConstantsStorage.HANDLER_PERMISSION_ID)){
                Log.d("Handlers", "Asking for permissions")
                handler.postDelayed(this, ConstantsStorage.HANDLER_PERMISSION_ID,10000)
            }
            if(checkAndRequestPermissions()){
                Log.d("Handlers", "Got all permissions, turning off handler")
                handler.removeCallbacks(this)
            }
        }
    }
    if(!handler.hasActiveRunnable(ConstantsStorage.HANDLER_PERMISSION_ID)){
        handler.post(runnableCode, ConstantsStorage.HANDLER_PERMISSION_ID)
    }
}

Ale stejně se mi vždy v logu zobrazí Asking for permissions, i když bych čekal, že tam bude jen jednou. Tuší někdo, kde dělám chybu?

Chci docílit: Problém je, že když ty práva povolím, tak se mi tam několikrát vypíše Got all permissions, turning off handler, takže hádám, že kdybych to nechal běžet dlouho, tak se tím celá aplikace zalaguje.

 
Odpovědět
3.6.2019 13:44
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 1 zpráv z 1.