2013-04-30 34 views
1

我想知道如果我可以依靠其在單獨的非UI線程,如果我留下Activity執行任務。看好下面的例子,我可以看到在一個單獨的ThreadRunnable正在執行,即使我在另一個Activity。但是什麼時候會被殺呢?該線程將活多久在以前的活動

public class MyActivity extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     runTask(); 
     startActivity(new Intent(this, SecondActivity.class)); 
    } 

    private void runTask() { 
     new Thread(new Runnable() { 
      @Override 
      public void run() { 
       while (true) { 
        Log.i("Dev", "here I am"); 
        SystemClock.sleep(1000); 
       } 
      } 
     }).start(); 
    } 
} 

回答

0

java.lang.Thread是不依賴於Android的UI組件的生命週期,所以就像在一個正常的JVM會繼續下去,直到其run()方法返回... 除非的Android終止您的整個應用程序之前,出現這種情況,它可以做,如果你的應用程序在後臺和其他應用程序所需要的RAM。順便提一下,因爲線程沒有綁定到UI組件生命週期,所以不能簡單地調用該線程中的另一個UI組件。你必須張貼到Handler或者如果你想回到UI發出廣播什麼的,但你可能已經知道了。

最後,在你的示例代碼中,Thread實例(通過匿名Runnable)將繼續被當作垃圾回收的封閉Activity類,所以你可能要重新考慮該構造。

如果您想做與任何單一Activity無關的後臺工作,您最好將其建模爲IntentService

+0

在一個答案這麼多很酷的點,謝謝你的迴應! – Eugene 2013-05-01 07:31:08