我正在审查/清理一些 Android 代码。该代码使用此模式执行了一些“异步”网络和数据操作:
new Thread() { public void run() { { ... runOnUiThread( { .. } ) }
很多。伴随着所有丑陋的后果(没有错误检查、 sleep 、 bool finish
变量...)。
到现在为止,我最终使用(少数)AsyncTasks
和(更多)Loaders
作为替代品。
现在我偶然发现了一些“即发即弃”的网络通信:代码(目前,线程,一如既往)调用网络服务发布一些数据。 我不需要知道是否接收到数据,也不需要知道是否有任何错误。
哪种方法最好? Runnable
或 AsyncTask
(静态嵌套类,所以我不会“泄露”对“此” Activity 的引用?)
或者有更好的东西(更“轻量级”和更清洁?)
最佳答案
如果您不需要知道任务执行何时完成,那么您绝对不需要 AsyncTask
。因此,最轻量级的解决方案就是一个Thread
。您可以使用 Executor
来为您创建线程。要摆脱嵌套类,您可以预定义任务。示例:
预定义任务:
public static class TaskA implements Runnable{
private int someParam;
public TaskA(int someParam) {
this.someParam = someParam;
}
@Override
public void run() {
//
}
}
静态执行器
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 根!因此,如果您将 Activity 或位图等重对象传递到任务中,则可能会导致内存泄漏。
关于android - 如何在 Android 中实现 "fire-and-forget"异步调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24550380/