Hirdetés

Keresés

Új hozzászólás Aktív témák

  • Karma

    félisten

    válasz thon73 #3618 üzenetére

    "Akkor a custom View osztályban lesz egy mHandler = new Handler(); rész. Ha jól értem, ez rácsatlakozik az UI thread által létrehozott looper-re."

    Igen és igen.

    Hogyan tudom ezt az egészet megállítani? Kiadok egy mHandler.removeCallbacks() utasítást?

    Igen. Ha megnézed a metódus szignatúráját, láthatod, hogy meg kell adni azt a Runnable példányt, aminek az ütemezését vissza akarod vonni.

    "1. De mi lesz ebben a runnable? Vagy egy runnable-vel meg tudom csinálni a fenti sort?"

    Ha kicsit konkretizáltad volna, hogy mit csinál a View-d és miért kell hozzá két ütem, nem kellene ennyire a levegőbe beszélnünk. Mindenesetre az biztos, hogy a késleltetett kódrészlete(ke)t ki kell raknod tagváltozó(k)ba, mert így tudsz a konkrét Runnable példányokra hivatkozni - melyek egyébként tipikusan lambdák vagy anoním osztályok.

    Például (kicsit pszeudokód lesz, mert most nincs előttem IDE):

    private Handler mHandler = new Handler();

    private Runnable mDelayedStep = new Runnable() {
    public void run() {
    Log.w(TAG, "BOOM!");
    }
    };

    public boolean onTouch(View v, MotionEvent event) {
    mHandler.removeCallbacks(mDelayedStep);
    mHandler.postDelayed(mDelayedStep, 5000);
    return true;
    }

    És ezzel írtál is egy mini játékot, amiben akkor robban a bomba, ha a felhasználó öt másodpercig nem nyúl a telefonhoz :P Amíg simogatja, elodázza a végzetét.

    Retrolambdával egyébként egy kicsit tömörebb:
    private Runnable mDelayedStep = () -> Log.w(TAG, "BOOM!");

    2. Azonnal megáll a végrehajtás, vagy a következő "tick" még lefut?

    Azonnal hat, tehát nem fog lefutni, amit kivettél.

    3. Ha leállítom, akkor rögtön indíthatok egy ugyanilyen ütemet, ugyanezekkel a példányokkal?

    Persze. Sőt, ha az lenne az igény, egy Runnable-t többször is beütemezhetsz, mert a message queue-ba többször is bekerülhet ugyanaz a példány. Fontos megjegyezni, hogy a removeCallbacks az összes hozzá tartozó üzenetet kiveszi.

Új hozzászólás Aktív témák