尝试解决TransactionTooLargeException异常

This commit is contained in:
张玉久
2021-02-05 17:03:14 +08:00
parent 2df94dddc5
commit 9e5ecf1520

View File

@ -8,6 +8,8 @@ import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.Parcel;
import android.os.TransactionTooLargeException;
import android.text.TextUtils;
import android.util.TypedValue;
import android.view.Gravity;
@ -74,6 +76,7 @@ public abstract class BaseActivity extends BaseAppCompatActivity implements Easy
public final static String LOGIN_EXCEPTION = "loginException";
public final static String PLUGGABLE = "plugin";
public final static int ID_ROOT_INDICATOR = 999;
public final int MAX_BUNDLE_SIZE = 300;
@NonNull
protected String mEntrance;
@ -363,4 +366,30 @@ public abstract class BaseActivity extends BaseAppCompatActivity implements Easy
}
return resources;
}
/**
* ActivityThread每次调用onSaveInstanceState时outState大小都会累加最终会导致{@link TransactionTooLargeException}异常
* 解决方案判断每次获取到的outState大小当达到300k时手动clear掉
*/
@Override
protected void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
long bundleSize = getBundleSize(outState);
if (bundleSize > MAX_BUNDLE_SIZE * 1024) {
outState.clear();
}
}
private long getBundleSize(Bundle bundle) {
long dataSize;
Parcel obtain = Parcel.obtain();
try {
obtain.writeBundle(bundle);
dataSize = obtain.dataSize();
} finally {
obtain.recycle();
}
return dataSize;
}
}