具有较大msg.obj的处理程序可以抛出TransactionTooLargeException吗?

问题描述 投票:0回答:1

我注意到Google控制台报告了很多例外情况:

java.lang.RuntimeException: 
  at android.app.servertransaction.PendingTransactionActions$StopInfo.run (PendingTransactionActions.java:160)
  at android.os.Handler.handleCallback (Handler.java:873)
  at android.os.Handler.dispatchMessage (Handler.java:99)
  at android.os.Looper.loop (Looper.java:201)
  at android.app.ActivityThread.main (ActivityThread.java:6815)
  at java.lang.reflect.Method.invoke (Method.java)
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:547)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:873)
Caused by: android.os.TransactionTooLargeException: 
  at android.os.BinderProxy.transactNative (BinderProxy.java)
  at android.os.BinderProxy.transact (BinderProxy.java:1131)
  at android.app.IActivityManager$Stub$Proxy.activityStopped (IActivityManager.java:3973)
  at android.app.servertransaction.PendingTransactionActions$StopInfo.run (PendingTransactionActions.java:144)
  at android.os.Handler.handleCallback (Handler.java:873)
  at android.os.Handler.dispatchMessage (Handler.java:99)
  at android.os.Looper.loop (Looper.java:201)
  at android.app.ActivityThread.main (ActivityThread.java:6815)
  at java.lang.reflect.Method.invoke (Method.java)
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:547)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:873)

我正在尝试找出引发该异常的原因,但我不能。我在源代码中唯一可疑的部分是我正在加载一个很大的json文件(7MB),并使用GSON将其解析为模型(data对象),并将其通过处理程序传递给我活动:

Message msg = new Message();
msg.what = Util.THREAD_DATA_GENERATED;
msg.obj = data;
handler.sendMessage(msg);

。。。

notifyHandler = new Handler(new Handler.Callback() {
    @Override
    public boolean handleMessage(Message msg) {
        Data data = (Data) msg.obj;
        Manager.getInstance().setData(data);
        showSelectTeamDialog();
        return true;
    }
});

传递较大的msg.obj参数时,此处理程序可以引发该异常吗?

android handler android-handler transactiontoolargeexception
1个回答
0
投票
查看堆栈跟踪。它包括:

在android.app.IActivityManager $ Stub $ Proxy.activityStopped(IActivityManager.java:3973)

因此,由于某种原因,活动被停止。发生这种情况的唯一原因是调用了finish还是启动了另一个活动。因此,我们在这里的Intent中肯定会看到太多数据。

© www.soinside.com 2019 - 2024. All rights reserved.