异步任务最佳实践

时间:2016-03-03 22:39:14

标签: android android-asynctask

关于android中的Async Task,最好将它们作为你正在使用的Activity的内部类包含在内,还是将它们作为自己的独立类更好?例如

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


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

或作为外部类

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_TCP)

while True:
  print s.recvfrom(65565)

1 个答案:

答案 0 :(得分:7)

AsyncTask拥有自己的生命周期,不依赖于Activity生命周期。当活动已被销毁时,您需要确保它没有对活动或视图的引用。

AsyncTask实现为内部类只有在static时才有意义。如果它不是静态的,那么它将具有对外部活动的隐式引用,这将导致内存泄漏。如果需要引用静态异步任务中的视图,请使用WeakReference

在单独的文件中实现AsyncTask也是一个好主意,但应用了相同的规则。如果需要,请使用弱引用。

static内部异步任务与异步任务在单独文件中的唯一区别是代码可读性。如果异步任务中有很多逻辑,请继续使用单独的文件。