2016-03-03 76 views
0

關於Android中的異步任務,最好的做法是將它們作爲您正在工作的活動的內部類,或者將自己作爲自己的獨立類更好?例如異步任務最佳實踐

public MyClass extents Activity 
{ 
     public void onCreate(){ 
     } 

     public class MyAsyncTask extents AsyncTask<Void, Void, Void> 
     { 
       protected void doInBackground() 
       { 
        //do stuff here.... 
       } 
     } 
     public void onResume(){ 
     } 
} 

或外部類

public class MyAsyncTask extents AsyncTask<Void, Void, Void> 
{ 
     protected void doInBackground() 
     { 
      //do stuff here.... 
     } 
} 


public MyClass extents Activity 
{ 
     public void onCreate(){ 
     } 
} 
+0

取決於你在做什麼 - 真的沒有「最好的方式」。如果它很大/很長,我會把它放在它自己的文件中,就像任何其他類一樣,這樣你的代碼就不會混亂。但是,這其實並不重要。另外值得注意的是,Stack Overflow並非真正適合「意見」問題的地方 - 您可能會在別處得到更好的答案。 – JonasCz

+1

@JonasCz事實上,它很重要......如果內部類是靜態的,那將是無論如何。在其他情況下,它包含對外部類的引用,並且它是一個活動,因爲Asynctask可能活得更長是錯誤的。 – Selvin

+0

@Selvin - 這不會使它「錯誤」......這意味着你必須處理這些引用,並確保在生命週期更改期間全部處理正確,這都是可能的。即使AsyncTask在單獨的類文件中,這也是一個問題。 – NoChinDeluxe

回答

5

AsyncTask有它自己的生命週期不依賴於Activity生命週期。當活動已被破壞時,您需要確保它沒有對活動或視圖的引用。

作爲內部類實現AsyncTask只有在static的情況下才有意義。如果它不是靜態的,那麼它會隱式引用外部活動,這會導致內存泄漏。如果您需要引用靜態異步任務中的視圖,請使用WeakReference

在單獨的文件中實現AsyncTask也是一個好主意,但應用了相同的規則。如果需要,使用弱引用。

static內部異步任務和單獨文件中的異步任務之間的唯一區別是代碼可讀性。如果異步任務中有很多邏輯,請繼續使用單獨的文件。