Sobes.tech
Junior — Middle

Kaip galima vykdyti paslaugą atskirame sraute trumpalaikiam uždaviniui atlikti?

sobes.tech AI

Atsakymas iš AI

Kad Android'e vykdytumėte trumpalaikę užduotį atskirame sraute, dažnai naudojama IntentService klasė (nors ji yra pasenusi, bet koncepcija yra naudinga) arba kuriamas savo paslauga, kurioje pradedamas naujas srautas. Pagrindinė idėja – ne blokuoti pagrindinį UI srautą.

Pavyzdys naudojant IntentService (pasenusi, bet paprastas būdas):

public class MyIntentService extends IntentService {
    public MyIntentService() {
        super("MyIntentService");
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        // Čia vykdoma trumpalaikė užduotis atskirame sraute
    }
}

Jei naudojate įprastą Service, galite pradėti naują srautą onStartCommand viduje:

public class MyService extends Service {
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        new Thread(() -> {
            // Trumpalaikė užduotis
            stopSelf(); // Paslauga sustoja po užbaigimo
        }).start();
        return START_NOT_STICKY;
    }

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
}

Taip paslauga atlieka darbą atskirame sraute, ne blokuodama UI, ir sustoja po užduoties pabaigos.