Sobes.tech
Junior — Middle

Jak spustit službu v samostatném vlákně pro vykonání krátkodobého úkolu?

sobes.tech AI

Odpověď od AI

Pro spuštění služby v samostatném vlákně pro krátkodobý úkol na Androidu často používají třídu IntentService (i když je zastaralá, ale koncept je užitečný) nebo si vytvoří vlastní službu, ve které spustí nový vlákno. Hlavní myšlenkou je nezablokovat hlavní vlákno UI.

Příklad s použitím IntentService (zastaralé, ale jednoduchý způsob):

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

    @Override
    protected void onHandleIntent(Intent intent) {
        // Zde se provádí krátkodobý úkol v samostatném vlákně
    }
}

Pokud použijete běžný Service, můžete v onStartCommand spustit nové vlákno:

public class MyService extends Service {
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        new Thread(() -> {
            // Krátkodobý úkol
            stopSelf(); // Zastavíme službu po dokončení
        }).start();
        return START_NOT_STICKY;
    }

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

Tímto způsobem služba vykonává práci v samostatném vlákně, nezablokuje UI a po dokončení úkolu se zastaví.