我正在审核/清理一些Android代码。代码做了一些"异步"使用这种模式的网络和数据操作:
new Thread() { public void run() { { ... runOnUiThread( { .. } ) }
很多。带来所有丑陋的后果(没有错误检查,Sleeps,布尔finish
变量......)。
直到现在,我最终使用(少数)AsyncTasks
和(更多)Loaders
作为替代品。
现在我偶然发现了几个“即使忘掉”的故事。网络通信:代码(当前,一如既往的线程)调用发布一些数据的Web服务。 我不需要知道数据是否已收到,我不需要知道是否有任何错误。
这是最好的方法吗?一个Runnable
或AsyncTask
(静态嵌套类,所以我没有"泄漏"对&#34的引用;这"活动?)
还是有更好的东西(更多"轻量级"更清洁?)
答案 0 :(得分:5)
如果您不需要知道任务执行何时完成,那么您根本不需要AsyncTask
。因此,最轻量级的解决方案只是Thread
。您可以使用Executor
为您创建线程。要摆脱嵌套类,您可以预先定义任务。样品:
预定义任务:
public static class TaskA implements Runnable{
private int someParam;
public TaskA(int someParam) {
this.someParam = someParam;
}
@Override
public void run() {
//
}
}
静态Executor
public static class FireAndForgetExecutor{
private static Executor executor = Executors.newFixedThreadPool(5);
public static void exec(Runnable command){
executor.execute(command);
}
}
用法:
FireAndForgetExecutor.exec(new TaskA(10));
PS 请勿忘记Thread
已连接到GC根目录!因此,如果将诸如活动或位图之类的重对象传递给任务,则可能导致内存泄漏。