改造中的多个排队导致内存不足错误?
Multiple enqueue in retrofit causing out of memory error?
我正在使用 retrofit2 做我的项目。当我的呼叫失败时,我重复此呼叫的相同呼叫 again.Repeation 使我的应用程序强制关闭。
当我查看日志时,我得到了错误日志,如下所示。我觉得这是由同一呼叫的多个排队引起的。所以我在排队之前就这样做了,我叫取消。但它不起作用。越来越接近。
FATAL EXCEPTION: main
Process: com.SocialMob, PID: 27846
java.lang.OutOfMemoryError: pthread_create (stack size 16384 bytes) failed: Try again
at java.lang.VMThread.create(Native Method)
at java.lang.Thread.start(Thread.java:1029)
at java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:920)
at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1338)
at okhttp3.Dispatcher.enqueue(Dispatcher.java:112)
at okhttp3.RealCall.enqueue(RealCall.java:78)
at okhttp3.RealCall.enqueue(RealCall.java:70)
at retrofit2.OkHttpCall.enqueue(OkHttpCall.java:104)
at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall.enqueue(ExecutorCallAdapterFactory.java:58)
at com.SocialMob.Activities.SplashActivity.VersionCheck(SplashActivity.java:184)
at com.SocialMob.Activities.SplashActivity.access0(SplashActivity.java:38)
at com.SocialMob.Activities.SplashActivity.onFailure(SplashActivity.java:177)
at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall.run(ExecutorCallAdapterFactory.java:75)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:146)
at android.app.ActivityThread.main(ActivityThread.java:5593)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
at dalvik.system.NativeStart.main(Native Method)
提前致谢。
您应该避免这种方法,因为它会使它成为递归调用。相反,您应该首先检查失败函数中的原因,然后重试。同时修正重试次数。
我正在使用 Retrofit 2.0.2,我的清单文件中有这个标签:
android:largeHeap="true"
我正在重试这样的失败:
@Override
public void onFailure(Call<AudioResponse> call, Throwable error) {
loading.setVisibility(View.GONE);
if (mAdapter.getItemCount() == 0) {
SetErrorContent();
}
Log.e("Error", error.getMessage() + "");
call.cancel();
call.clone().enqueue(this);
}
不是crashing.Give试试看。
我正在使用 retrofit2 做我的项目。当我的呼叫失败时,我重复此呼叫的相同呼叫 again.Repeation 使我的应用程序强制关闭。 当我查看日志时,我得到了错误日志,如下所示。我觉得这是由同一呼叫的多个排队引起的。所以我在排队之前就这样做了,我叫取消。但它不起作用。越来越接近。
FATAL EXCEPTION: main
Process: com.SocialMob, PID: 27846
java.lang.OutOfMemoryError: pthread_create (stack size 16384 bytes) failed: Try again
at java.lang.VMThread.create(Native Method)
at java.lang.Thread.start(Thread.java:1029)
at java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:920)
at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1338)
at okhttp3.Dispatcher.enqueue(Dispatcher.java:112)
at okhttp3.RealCall.enqueue(RealCall.java:78)
at okhttp3.RealCall.enqueue(RealCall.java:70)
at retrofit2.OkHttpCall.enqueue(OkHttpCall.java:104)
at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall.enqueue(ExecutorCallAdapterFactory.java:58)
at com.SocialMob.Activities.SplashActivity.VersionCheck(SplashActivity.java:184)
at com.SocialMob.Activities.SplashActivity.access0(SplashActivity.java:38)
at com.SocialMob.Activities.SplashActivity.onFailure(SplashActivity.java:177)
at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall.run(ExecutorCallAdapterFactory.java:75)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:146)
at android.app.ActivityThread.main(ActivityThread.java:5593)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
at dalvik.system.NativeStart.main(Native Method)
提前致谢。
您应该避免这种方法,因为它会使它成为递归调用。相反,您应该首先检查失败函数中的原因,然后重试。同时修正重试次数。
我正在使用 Retrofit 2.0.2,我的清单文件中有这个标签:
android:largeHeap="true"
我正在重试这样的失败:
@Override
public void onFailure(Call<AudioResponse> call, Throwable error) {
loading.setVisibility(View.GONE);
if (mAdapter.getItemCount() == 0) {
SetErrorContent();
}
Log.e("Error", error.getMessage() + "");
call.cancel();
call.clone().enqueue(this);
}
不是crashing.Give试试看。