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í.