0
我正在處理使用loopj(最新版本:1.4.6)下載一些大的(5m +)文本數據(複雜的json編碼的對象(內存泄漏,ui凍結,...)其中包含base64編碼的二進制數據作爲其字段之一)。這裏的延伸TextHttpResponseHandler下載數據使用loopj下載大數據
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,並且在日誌的幫助下,我非常肯定ANR在應用程序試圖進行http調用時發生。這些http調用是在後臺服務中創建的,根據loopj文檔,它應該是異步的。關於ANR的原因的任何想法?
認真嗎?你確定嗎?我認爲它足夠穩定(基於已經使用庫的大型項目,例如instagram,pinterest等) – nima
和base64編碼,我認爲這是處理複雜對象的唯一方法,各種領域(文本,布爾,二進制);我所做的是用base64編碼二進制字段,並用json呈現整個數據結構;任何其他建議? – nima
正常情況下,當我這樣做時,我使用鏈接工作,因此正常發送對象並在二進制字段上發送鏈接,並在第二個請求上下載文件。 – Leonardo