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.