Sobes.tech
Junior — Middle

Ako spustiť službu v samostatnom vlákne na vykonanie krátkodobej úlohy?

sobes.tech AI

Odpoveď od AI

Za vykonanie služby v samostatnom vlákne pre krátkodobej úlohy na Androide sa často používa trieda IntentService (hoci je zastaraná, ale koncept je užitočný) alebo sa vytvorí vlastná služba, v ktorej sa spustí nové vlákno. Hlavná myšlienka je nezablokovať hlavné vlákno používateľského rozhrania.

Príklad s použitím IntentService (zastarané, ale jednoduchý spôsob):

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

    @Override
    protected void onHandleIntent(Intent intent) {
        // Tu sa vykonáva krátkodobá úloha v samostatnom vlákne
    }
}

Ak používate bežnú Service, môžete spustiť nové vlákno v onStartCommand:

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

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

Týmto spôsobom služba vykonáva prácu v samostatnom vlákne, neblokuje UI a po dokončení úlohy sa zastaví.