Android która metoda się wykona

0

Dzień dobry!,
mam pytanie, załóżmy że mamy taki przypadek:
dwie "aktywne" metody w widoku, jeden przycisk i metoda wykonywana po jego wciśnięciu (public void buttonClick(View view) ), i jedna metoda od czujnika która reaguje na jego zmiany (public void onSensorChanged(SensorEvent event) ) .
i tutaj nasuwa się pytanie, co się stanie jak będzie się wykonywała jedna metoda np ulegnie zmianie wartość czujnika, i w tej chwili ktoś przycisk, czy metoda obsługująca zmianę wartości czujnika zostanie przerwana i program skoczy do obsługi przycisku, czy zostanie ona dokończona a przycisk wejdzie w jakąś kolejkę i zostanie wykony jak program będzie wolny ?

Z góry dziękuję za pomoc : D

0

Wszystko zależy od tego, jak to zostanie napisane. Bez kodu, to możemy tutaj jedynie wróżyć, jak z fusów. ;)

0

Od razu zaznaczam, że ktoś z doświadczeniem od Androida niech potwierdzi, ale;
obsługa sensora jest wykonywana na wątku aktywności z której go rozpoczęliśmy (no chyba, że jakoś celowo dodasz go do innego wątku), więc można przyjąć założenie do twojego pytania, że będzie to main/UI thread. To samo z obsługą buttona.
Skoro są na jednym wątku, to wykonają się po kolei.
Poza tym, nie ma tu czegoś takiego, że "wciśniesz przycisk i przerwie mi wykonywanie metody która wykonuje się teraz" - albo to co jest pod buttonem zostanie dodane do kolejki, albo z powodu zablokowanego wątku (jakaś bardzo długa operacja) program "poczeka" z odczytaniem kliknięcia użytkownika.

Do użytkowania/nasłuchiwania sensorów na pewno korzystasz z klasy, która rozszerza jakiegoś rodzaju SensorEventListener, której nasłuchiwanie musi zostać zarejestrowane (moment startu), i po starcie nasłuchiwania sobie to już leci "samo".

    public void registerListener() {
        mSensorManager.registerListener(this, mSensor, SensorManager.SENSOR_DELAY_NORMAL);
    }

Oczywiście, że może być tak, że po wciśnięciu przycisku, nasłuchiwanie będzie przerwane, ale stanie się to, gdy obiekt klasy zostanie np. odrejestrowany.

    public void unregisterListener() {
        mSensorManager.unregisterListener(this);
    }

Nie wiem jakiego sensora masz zamiar używać (poza tym, użyłem tylko kilka z nich na krzyż, więc nie wiem czy jest jakiś który "blokuje" thread poprzez wykonywanie jakiejś długiej i kosztownej operacji), ale zależnie od rodzaju działają one poprzez częste wywoływanie żądania o wartość z sensora - właściwa odpowiedź na twoje pytanie ( na tyle często, że lepiej nałożyć jakieś ograniczenie, żeby nie spamowało nam niepotrzebnym wynikami).

0

Dziękuję za odpowiedź, jeżeli chodzi o konkrety to mam taką klasę :

public class Test extends Activity implements SensorEventListener { }

z takimi metodami:


    @Override
    public void onSensorChanged(SensorEvent event) {}

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {}

    CountDownTimer countDownTimer = new CountDownTimer(5000, 1000) {
       public void onTick(long millisUntilFinished) {}  
       public void onFinish() {}
    };

    public void ButtonStartClick(View view) {}

I jak widać są tutaj 3 metody, których wykonanie zależy od czynników zewnętrznych, i pytanie czy jedno może przerwać drugie, czy zawsze się wykona w kolejności nadejścia? : )

1 użytkowników online, w tym zalogowanych: 0, gości: 1