2015-05-21 148 views
-1

有人問我線程如AsyncTaskThreadRunnable在應用程序級別運行還是運行在活動級別?Android線程是應用程序級別還是活動級別?

所有線程在後臺執行一些工作,可能會或可能不會將輸出返回到主線程(活動/片段)。

例如我做AsyncTask.execute()onPostExecute()我會返回一些數據。在doInBackground之前和onPostExecute之間如果I/OS殺死活動比onPostExecute將數據傳遞給不再可用但在回調方法內的活動,我首先檢查活動是否正在運行,否則不進行任何操作。

這意味着線程在應用程序級別上運行,我是吧?

回答

0

線程在應用程序級別上運行。

活動只是應用程序組件來組織您的代碼。

當應用程序被終止時,運行所有線程的進程終止。

欲瞭解更多信息: http://developer.android.com/guide/components/processes-and-threads.html

+0

幾乎 - 但應用程序與進程之間沒有1:1的對應關係。 –

+0

我從來沒有聽說過運行多個進程而不是服務的應用程序。但很高興知道。 –

0

首先,我們可以檢查這些類的定義。

可運行是一個接口,定義如下:

package java.lang; 

public interface Runnable { 
    void run(); 
} 

線程是一個類實現Runnable接口,定義如下:

package java.lang; 

public class Thread implements Runnable { 
    public Thread() { 
     throw new RuntimeException("Stub!"); 
    } 
} 

所述的AsyncTask是一個抽象類,定義如下所示:

package android.os; 

public abstract class AsyncTask<Params, Progress, Result> { 

    public final AsyncTask<Params, Progress, Result> execute(Params... params) { 
     throw new RuntimeException("Stub!"); 
    } 
} 

正如你所說的,一個活動正在運行廣告,同時一個Runnable可能會或可能不會在同一個線程上運行,因爲它只是一個接口,只是一段代碼。

AsyncTask不在主線程上運行,它在非UI線程上運行,因此它可以在主線程上運行活動時執行一些並行作業。

在應用程序的生存時間控制下的所有對象(Activity,AsyncTask,Thread)。

0

AsyncTask,Thread,Runnable等線程在應用程序級別上運行,或者它們在活動級別運行?

他們在Application level運行,因爲一個Activity may be destroyed同時的AsyncTask或線程從Web下載文件。

還有一件事情,當做這樣的operation使用getApplicationContext()否則內存泄漏。

相關問題