Sobes.tech
Junior — Middle

Kā var izpildīt pakalpojumu atsevišķā pavedienā īslaicīga uzdevuma veikšanai?

sobes.tech AI

Atbilde no AI

Lai veiktu pakalpojumu atsevišķā pavedienā īslaicīgai uzdevumam Android, bieži izmanto klasi IntentService (lai gan tā ir novecojusi, bet koncepcija ir noderīga) vai izveido savu pakalpojumu, kurā tiek palaists jauns pavediens. Galvenā ideja ir neblokēt galveno UI pavedienu.

Piemērs ar IntentService (novecojis, bet vienkāršs veids):

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

    @Override
    protected void onHandleIntent(Intent intent) {
        // Šeit tiek veikts īslaicīgs uzdevums atsevišķā pavedienā
    }
}

Ja izmantojat parastu Service, varat sākt jaunu pavedienu onStartCommand iekšpusē:

public class MyService extends Service {
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        new Thread(() -> {
            // Īslaicīgs uzdevums
            stopSelf(); // Pakalpojums tiek apturēts pēc pabeigšanas
        }).start();
        return START_NOT_STICKY;
    }

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

Tādējādi pakalpojums veic darbu atsevišķā pavedienā, neblokējot UI, un pēc uzdevuma pabeigšanas tas tiek apturēts.