Zauważyłem zaskakujące zachowanie podczas usuwania aplikacji z przełącznika aplikacji przez przesuwanie. Aplikacja ma usługę. Gdy aplikacja zostanie "zabita", wszystkie wątki uruchomione z usługi będą nadal działać, inne wątki zostaną zakończone.Co dokładnie dzieje się po usunięciu zadania z ostatnich czasów?
Co naprawdę zaskakujące jest to, że system może określić, które wątki zostały rozpoczęte od służby, nawet jeśli starają się zaciemniać początek gwintu jest tak:
- W onCreate dla usługi() metoda, umieścić runnable do głównego programu obsługi wątków.
- Runnable rozpoczyna nowy wątek, który przetrwał usunięcie z ostatnich.
Jeśli prześlę dokładnie ten sam program do tego samego programu obsługi, ale z działania, wątek nie przeżyje. W jaki sposób system może wiedzieć? Czy w jakiś sposób śledzi, z jakiego wątku został opublikowany napis?
Edycja: Zgodnie z wnioskiem, onCreate() metoda:
@Override
public void onCreate() {
super.onCreate();
new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
@Override
public void run() {
new Thread(){
@Override
public void run() {
while (true) {
System.out.println("hello from thread");
try {
Thread.sleep(1000);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
}
}
}.start();
}
}, 1000);
}
Właściwie 'Service' jest w android działa na' UI Thread' (chyba, że używasz 'IntentService') –
i Obsługi systemu Android zawiera "ThreadLocal", aby sprawdzić wątek interfejsu użytkownika. –
Uprzejmie opublikuj swój kod dla onCreate(), jeśli to możliwe. –