2016-09-12 21 views
5

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); 
} 
+0

Właściwie 'Service' jest w android działa na' UI Thread' (chyba, że ​​używasz 'IntentService') –

+0

i Obsługi systemu Android zawiera "ThreadLocal", aby sprawdzić wątek interfejsu użytkownika. –

+0

Uprzejmie opublikuj swój kod dla onCreate(), jeśli to możliwe. –

Odpowiedz

2

końcu dowiedział się, co się dzieje. System nie zabija selektywnie wątków nieobsługujących, zabija całą aplikację, a następnie uruchamia ponownie usługę, więc wygląda na to, że wątki usługi pozostały nietknięte.

+0

, więc jeśli masz uruchomiony proces (np. Kopiowanie pliku) utracisz ten plik? –

+0

@MoshErsan Myślę, że plik przetrwa, ale będzie po prostu niekompletny. – fhucho

+0

to, co mam na myśli, tak czysta aplikacja z ostatnich zepsuje twój proces –

1

Po prostu chcesz rzucić trochę światła na to.

Składniki systemu Android nie uwzględniają nici, które nie zostały utworzone. Tak więc, podczas gdy IntentService zajmie się wątkiem utworzonym do użytku z onHandleIntent(), zwykła Usługa nie będzie zwracać uwagi na wątki, które sam rozwiążesz.

Po zniszczeniu usługi wszelkie wątki, które wyciekną, będą nadal działać, aż do momentu zakończenia procesu przez system Android.

Jeśli wątki są nieoczekiwanie zatrzymywania, który nie ma nic wspólnego z Służby - znowu usługi nic nie wie o wątkach, że widelec siebie.

+0

Jestem tego świadomy, dlatego zachowanie było tak mylące. – fhucho

0

Od odniesień,

przerywa aplikację w taki sam sposób prasowania z powrotem w kółko robi. Czasami to również zabija procesy w tle, ale czasami nie:

Usunięcie wpisu z ostatnich zadań spowoduje utratę procesów działających w tle, które istnieją w tym procesie. Nie spowoduje to bezpośrednio zatrzymania usług, jednak istnieje interfejs API, dzięki któremu mogą dowiedzieć się, że zadanie zostało usunięte, aby zdecydować, czy chcą, aby to oznaczało, że powinny przestać. Jest tak, że usunięcie, powiedzmy, ostatniego zadania aplikacji e-mail nie spowoduje, że przestanie sprawdzać pocztę e-mail.

Jeśli naprawdę chcesz całkowicie zatrzymać aplikację, możesz długo naciskać na ostatnie zadania, aby przejść do informacji o aplikacji i nacisnąć przycisk zatrzymania tam. Wymuszenie zatrzymania to całkowite zabicie aplikacji - wszystkie procesy zostają zabite, wszystkie usługi zatrzymane, wszystkie powiadomienia usunięte, wszystkie alarmy usunięte itd. Aplikacja nie może ponownie uruchomić się, dopóki nie zostanie wyraźnie zażądana.

Zasadniczo decyzja należy do aplikacji i zależy od tego, w jaki sposób została ona zakodowana.Warto obejrzeć ekran w Ustawieniach> Aplikacje> Uruchomione, aby zobaczyć, jak działa każda z aplikacji.

Sprawdź poniższy link, aby uzyskać więcej informacji.

Referencje Linki: -

http://lifehacker.com/what-happens-when-you-remove-an-app-from-androids-mult-1179868228

http://www.howtogeek.com/169549/what-exactly-happens-when-you-swipe-an-android-app-from-the-recent-apps-list/

https://plus.google.com/+DianneHackborn/posts/GfwRYCC42uX

Powiązane problemy