我正在使用AsyncTask将我的位图转换为base64字符串。 之后,在 asyncTask 的执行后,我尝试使用改造将该 base64 字符串上传到服务器中。
但是当我提出改造请求时,我的应用程序被冻结了。
这是我的代码:
public class ConvertBitmapToString extends AsyncTask<String, String, String> {
@Override
protected String doInBackground(String... params) {
String base64String = FrequentFunctions.convertBitmapToBase64(singleBitmapDetail.getBitMap());
return base64String;
}
@Override
protected void onPostExecute(final String result) {
hideProgressBar();
hitInsertImageApi(result);
}
@Override
protected void onPreExecute() {
baseShowProgressBar();
}
}
这是我的改造要求代码:
Call<InsertImageResponse> callback = api.insertUpdateImage(userId, imageid, imageData);
callback.enqueue(new Callback<InsertImageResponse>() {
@Override
public void onResponse(Call<InsertImageResponse> call, Response<InsertImageResponse> response) {
if (response.body().getReturnMessage().equalsIgnoreCase("success")) {
handler.onSuccess(response.body());
} else {
handler.onError("Something went wrong");
}
}
@Override
public void onFailure(Call<InsertImageResponse> call, Throwable t) {
handler.onError(t.getMessage());
}
});
请帮帮我
您仍然在执行后调用改造...此时,当您与 UI 元素交互时,这是在主线程上。通过调用 retrofit,它会使线程成为瓶颈,直到发送 base64 字符串。
默认情况下,改造在后台运行,并使用回调将结果发送到主线程。请参阅性能分析器,然后您可以了解哪一侧占用了设备的更多内存。
就我而言,当someString
为 null 时,someString.equalsIgnoreCase(otherString)
停止了剩余的代码执行(没有错误(;
就我而言,Retrofit 的创建/初始化是当您使用 Moshi 等适配器时特别阻止 UI 线程的创建/初始化。其他人也在其存储库中报告了此问题。