Android 使用loopj下载大数据

Android 使用loopj下载大数据,android,json,memory-leaks,android-async-http,loopj,Android,Json,Memory Leaks,Android Async Http,Loopj,我正在使用loopj(最新版本:1.4.6)下载一些大型(5m+以上)文本数据(复杂的json编码对象,其中包含base64编码的二进制数据作为其字段之一)来处理问题(内存泄漏、ui冻结等)。下面是扩展TextHttpResponseHandler以下载数据的基类 public class AsyncResponseHandler extends TextHttpResponseHandler { private final HttpAsyncResultTask asyncResul

我正在使用loopj(最新版本:1.4.6)下载一些大型(5m+以上)文本数据(复杂的json编码对象,其中包含base64编码的二进制数据作为其字段之一)来处理问题(内存泄漏、ui冻结等)。下面是扩展TextHttpResponseHandler以下载数据的基类

public class AsyncResponseHandler extends TextHttpResponseHandler {

    private final HttpAsyncResultTask asyncResultTask;

    private final Logger logger = LoggerFactory.getLogger(AsyncResponseHandler.class);

    public AsyncResponseHandler(final HttpAsyncResultTask asyncResultTask){
        super("utf-8"); // todo: ...
        this.asyncResultTask = asyncResultTask;
    }


    @Override
    public void onFailure(final int i, final Header[] headers, final String s, final Throwable throwable) {
        logger.warn("got failure: i: " + i + " , s: " + s + " , t: " + throwable);
        asyncResultTask.onFailure();
    }

    @Override
    public void onSuccess(final int i, final Header[] headers, final String s) {
        logger.debug("got success: i: " + i + " , s: " + s);
        asyncResultTask.onSuccess(s);

    }

    @Override
    public void onSuccess(int statusCode, Header[] headers, byte[] responseBytes) {
        super.onSuccess(statusCode, headers, responseBytes);
    }

    @Override
    public void onFailure(int statusCode, Header[] headers, byte[] responseBytes, Throwable throwable) {
        super.onFailure(statusCode, headers, responseBytes, throwable);
    }

}
注意,HttpAsyncResultTask接口可能有基于给定任务的多个实现

已编辑
嗯,我改变了一点方法,分别下载了资源中较小的文件块(&并发);因此,现在资源的大小不是问题。但我仍然在我的应用程序中获得ANR,在日志的帮助下,我非常确定当应用程序尝试进行http调用时,ANR会发生。这些http调用是在后台服务中创建的,根据loopj文档,它应该是异步的。关于ANRs的原因有什么想法吗?

这里的问题是lib,它使用ApacheHTTP客户端下载所有服务器数据,并且有bug,Android团队说“改用HttpURLConnection”

我真的建议您使用OkHttpClient而不是AsyncHttpClient


但是在文本响应上解析base64二进制不是一个好主意。

真的吗?你确定吗?我认为它足够稳定(基于使用该库的大型项目,例如instagram、pinterest等),关于base64编码,我认为这是处理具有各种字段(文本、布尔、二进制)的复杂对象的唯一方法;我所做的是用base64编码二进制字段,并用json表示整个数据结构;还有其他建议吗?通常当我这样做时,我使用链接,所以正常发送对象,在二进制字段上发送链接,并在第二次请求时下载文件。