2013-03-10 76 views
0

我測試想在Android中Java的多線程是這樣的:的Android守護線程測試

private void testDeamon(){ 

    Thread d = new Daemon(); 
    System.out.println(
      "d.isDaemon() = " + d.isDaemon()); 


    try { 
     Thread.sleep(2000); 
    } catch (InterruptedException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

} 


public class Daemon extends Thread { 
    private static final int SIZE = 10; 
    private static final String TAG = null; 
    private int i = 9000; 

    private Thread[] t = new Thread[SIZE]; 
    public Daemon() { 
     setDaemon(true); 
     start(); 
    } 
    public void run() { 
     for(int i = 0; i < SIZE; i++) 
      t[i] = new DaemonSpawn(i); 
     for(int i = 0; i < SIZE; i++) 
      System.out.println(
        "t[" + i + "].isDaemon() = " 
          + t[i].isDaemon()); 
     while(true) { 
      Log.d(TAG, "Deamon running..."+ i--); 
      if (i==0) 
       break; 

      yield(); 
     } 
    } 

    class DaemonSpawn extends Thread { 
     public DaemonSpawn(int i) { 
      System.out.println(
        "DaemonSpawn " + i + " started"); 
      start(); 
     } 
     public void run() { 
      while(true) 
       yield(); 
     } 
    } 
} 
  1. 爲什麼產卵守護程序的結果是假的,所以一個守護進程的菌種是不是在這裏守護進程

  2. 爲什麼守護進程在Android應用程序退出後繼續運行?根據TIJ的說法,在所有非deamon線程被殺死並且deamon線程退出後,JVM退出。所以應用程序銷燬後JVM不會關閉?謝謝。

+0

我想你可能不得不使用'setDaemon(true);'使它們成爲守護進程,這樣isDaemon()將返回true而不是false。 – FoamyGuy 2013-03-10 15:31:22

回答

1

我無法回答第一個問題。它們也應該是守護進程(http://www.linuxtopia.org/online_books/programming_books/thinking_in_java/TIJ315_005.htm
對於Android目的,守護進程線程或非守護進程線程都沒有意義。您的應用程序的進程永遠不會退出:它會保留在後臺或在某個時間點被終止。

第二個問題: 「... Android應用程序退出...」是什麼意思?應用程序不會「退出」,他們只是進入後臺,如果操作系統認爲有必要,他們可能會被殺死。

換句話說,當你的應用進入後臺時,它不會退出。它繼續在後臺運行(直到它在某個時刻被殺死)。

+0

「Android應用程序退出」意味着我退出了一個應用程序,主Activity被破壞。 – herbertD 2013-03-11 01:32:53

+0

謝謝!那麼每個應用程序都有一個JVM? – herbertD 2013-03-11 01:40:05

+0

這取決於,但一般來說:是的。 – 2013-03-11 13:50:46