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