Jak uruchomić usługę w nowym wątku. Szukałem innych pytań, ale to działa dla mnie. Jakie zmiany należy wprowadzić w mojej usłudze, gdy zwykle działa i działa w osobnym wątku?Jak uruchomić usługę w nowym wątku?
Odpowiedz
W moim projekcie, mam kogoś takiego i to jest praca:
Thread welcomeThread = new Thread() {
@Override
public void run() {
try {
super.run();
while (isMyServiceRunning() != true) {
sleep(100);
}
} catch (Exception e) {
System.out.println("EXc=" + e);
} finally {
Intent i = new Intent(getApplicationContext(), MainPage.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
}
}
};
welcomeThread.start();
Powołując od http://developer.android.com/reference/android/app/Service.html
„Należy pamiętać, że usługi, podobnie jak inne obiekty aplikacji, uruchamianych w głównym wątku procesu ich hosting Oznacza to, że jeśli twoja usługa będzie wykonywała intensywnie procesor (taki jak odtwarzanie MP3) lub blokowanie (takie jak praca w sieci), powinien odrodzić własny wątek, w którym można wykonać tę pracę. Więcej informacji na ten temat można znaleźć w procesach i wątkach Klasa IntentService jest dostępna jako standardowa implementacja Usługi, która ma swoją własny wątek, w którym planuje swoją pracę do wykonania. "
Już to przeczytałem :) To właśnie to Nie jestem w stanie dowiedzieć się, jak uruchomić moją usługę w nowym wątku. Próbowałem kodu z innych pytań na tym forum, ale pracuję dla mnie. – carora3
Czy używałeś IntentService, jak tutaj? http://developer.android.com/reference/android/app/IntentService.html – Stefan
Alternatywnie możesz utworzyć WorkerThread w ten sposób: prywatna ostatnia klasa WorkerThread rozszerza wątek { \t public Handler handler; \t @ Zastąpienie \t publiczny void run() { \t Looper.prepare(); \t to.Handler handler = new() { \t @Override \t public void handleMessage (końcowe msg Message) { \t przełącznik (msg.what) { \t \t przypadek MSG_DO_MY_JOB: \t \t \t // ... \t \t przerwa ; \t \t obudowa MSG_STOP: YourOuterClass.this.stopSelf(); \t \t Przerwa; \t} } }; Looper.loop(); } } } Uruchom pracownika po utworzeniu usługi i wyślij wiadomości do obsługi, jeśli chcesz coś zrobić. – Stefan
Zmień nazwę metody public void onStart(final Intent intent, final int startId)
do _onStart
i wykorzystać tę nową onStart
realizacji:
@Override
public void onStart(final Intent intent, final int startId) {
Thread t = new Thread("MyService(" + startId + ")") {
@Override
public void run() {
_onStart(intent, startId);
stopSelf();
}
};
t.start();
}
private void _onStart(final Intent intent, final int startId) {
//Your Start-Code for the service
}
dla poziomów API 5 i nowsze
public void onStart(Intent, int)
została zaniechana na poziomie API 5. To powinno być zastąpione public int onStartCommand(Intent, int)
@Override
public int onStartCommand(final Intent intent, final int startId){
//All code from 'onStart()' in above placed here as normal.
}
private void _onStart(final Intent intent, final int startId) {
//Your Start-Code for the service
}
Nie zapewnia to odpowiedzi na pytanie. Aby skrytykować lub poprosić o wyjaśnienie od autora, pozostaw komentarz pod swoim postem. –
@MD co masz na myśli? Jasno daje odpowiedź ... Może miałeś na myśli inny post? – theomega
Dlaczego 'stopSelf();' zaraz po uruchomieniu? –
Nie sądzę, że możesz uruchomić usługę w nowym wątku, ale możesz zacząć od nowego wątku w swojej usłudze.
Dzieje się tak, ponieważ podobnie jak działanie, usługa ma metody cyklu życia, które działają w głównym wątku.
Twoja usługa będzie działała na głównym wątku, ale spowoduje ciężkie podnoszenie nowego wątku, który tworzy, kiedy tylko będzie trzeba.
Mam nadzieję, że to pomaga ..
- 1. Jak uruchomić usługę, nie w głównym wątku?
- 2. Jak uruchomić usługę z fragmentów?
- 3. Jak automatycznie uruchomić usługę węzła?
- 4. Jak zdalnie ponownie uruchomić usługę?
- 5. Jak uruchomić DLL jako usługę w .NET
- 6. Qt - Handle QTcpSocket w nowym wątku
- 7. Uruchomić usługę Windows i uruchomić cmd
- 8. Jak uruchomić usługę automatycznego uruchamiania okna?
- 9. Jak uruchomić usługę WebJob Azure WebJob lokalnie?
- 10. Java wykonuje javax.swing.Timer na nowym wątku?
- 11. Instancja klasy Python rozpoczyna metodę w nowym wątku
- 12. Jak ponownie uruchomić usługę na komputerze zdalnym w systemie Windows?
- 13. Jak uruchomić usługę po uruchomieniu aplikacji w Angular 2
- 14. Jak uruchomić usługę analizy w SQL Server Express Edition
- 15. Wyślij polecenie ponownego ładowania, aby uruchomić usługę
- 16. W marionetce, jak zatrzymać usługę, wykonać jakąś akcję, a następnie uruchomić usługę?
- 17. Jak uruchomić WildFly jako usługę z standalone-full.xml?
- 18. jak uruchomić usługę okienkową (F5) ze studia wizualnego
- 19. Jak ponownie uruchomić usługę po zabiciu aplikacji z ostatnich zadań
- 20. Jak uruchomić projekt konsoli ServiceStack jako usługę systemu Windows?
- 21. Jak uruchomić funkcję w wątku tła dla Windows Phone 7?
- 22. Jak uruchomić i zatrzymać usługę Redis z uwierzytelnianiem?
- 23. Jak uruchomić usługę, gdy urządzenie z Androidem jest włączone?
- 24. Jak uruchomić usługę mongodb na Mac OS X?
- 25. Testy integracyjne na górnej półce, aby uruchomić usługę Windows # C#
- 26. Tworzenie nowego okna WPF na nowym błędzie wątku
- 27. Jak stworzyć usługę Windows Seler?
- 28. webapi 2 - jak poprawnie wywołać długotrwałą metodę async/w nowym wątku i zwrócić odpowiedź na klienta
- 29. Czy mogę uruchomić usługę bez aktywności lub odbiornika?
- 30. Czy mogę uruchomić Tomcat jako usługę do zrzucania sterty?
Dude, poprosiłem o rozpoczęciu usługę .. U R rozpoczęcie działalności .. – carora3
tak, to jakie? zmień wartość startActivity na startService (i); –
Przepraszam, że ta aplikacja działa również :(To tylko podsłuch, kiedy wszystko wydaje się w porządku .. – carora3