2016-03-03 77 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内部异步任务和单独文件中的异步任务之间的唯一区别是代码可读性。如果异步任务中有很多逻辑,请继续使用单独的文件。