开发者社区 问答 正文

android_os_TransactionTooLargeException如何解决?


问题分析:
Binder传输的数据存在Parcel类中,如果Binder的参数或返回值太大(超过1MB),不适合的事务缓冲区,调用会失败,并抛出TransactionTooLargeException。
解决方案:
Binder的参数或返回值太大导致调用失败,并抛出TransactionTooLargeException,建议不要将大量数据传入Binder,避免传入大数组、大量字符串或位图。
代码示例:

  1. [backcolor=transparent]android[backcolor=transparent].[backcolor=transparent]os[backcolor=transparent].[backcolor=transparent]TransactionTooLargeException
  2. [backcolor=transparent]    at android[backcolor=transparent].[backcolor=transparent]os[backcolor=transparent].[backcolor=transparent]BinderProxy[backcolor=transparent].[backcolor=transparent]transact[backcolor=transparent]([backcolor=transparent]Native[backcolor=transparent] [backcolor=transparent]Method[backcolor=transparent])
  3. [backcolor=transparent]    at com[backcolor=transparent].[backcolor=transparent]android[backcolor=transparent].[backcolor=transparent]internal[backcolor=transparent].[backcolor=transparent]view[backcolor=transparent].[backcolor=transparent]IInputMethodManager$Stub$Proxy[backcolor=transparent].[backcolor=transparent]startInput[backcolor=transparent]([backcolor=transparent]IInputMethodManager[backcolor=transparent].[backcolor=transparent]java[backcolor=transparent]:[backcolor=transparent]604[backcolor=transparent])
  4. [backcolor=transparent]    at android[backcolor=transparent].[backcolor=transparent]view[backcolor=transparent].[backcolor=transparent]inputmethod[backcolor=transparent].[backcolor=transparent]InputMethodManager[backcolor=transparent].[backcolor=transparent]startInputInner[backcolor=transparent]([backcolor=transparent]InputMethodManager[backcolor=transparent].[backcolor=transparent]java[backcolor=transparent]:[backcolor=transparent]1173[backcolor=transparent])
  5. [backcolor=transparent]    at android[backcolor=transparent].[backcolor=transparent]view[backcolor=transparent].[backcolor=transparent]inputmethod[backcolor=transparent].[backcolor=transparent]InputMethodManager[backcolor=transparent].[backcolor=transparent]checkFocus[backcolor=transparent]([backcolor=transparent]InputMethodManager[backcolor=transparent].[backcolor=transparent]java[backcolor=transparent]:[backcolor=transparent]1282[backcolor=transparent])
  6. [backcolor=transparent]    at android[backcolor=transparent].[backcolor=transparent]view[backcolor=transparent].[backcolor=transparent]ViewRootImpl$ViewRootHandler[backcolor=transparent].[backcolor=transparent]handleMessage[backcolor=transparent]([backcolor=transparent]ViewRootImpl[backcolor=transparent].[backcolor=transparent]java[backcolor=transparent]:[backcolor=transparent]3201[backcolor=transparent])
  7. [backcolor=transparent]    at android[backcolor=transparent].[backcolor=transparent]os[backcolor=transparent].[backcolor=transparent]Handler[backcolor=transparent].[backcolor=transparent]dispatchMessage[backcolor=transparent]([backcolor=transparent]Handler[backcolor=transparent].[backcolor=transparent]java[backcolor=transparent]:[backcolor=transparent]102[backcolor=transparent])
  8. [backcolor=transparent]    at android[backcolor=transparent].[backcolor=transparent]os[backcolor=transparent].[backcolor=transparent]Looper[backcolor=transparent].[backcolor=transparent]loop[backcolor=transparent]([backcolor=transparent]Looper[backcolor=transparent].[backcolor=transparent]java[backcolor=transparent]:[backcolor=transparent]136[backcolor=transparent])
  9. [backcolor=transparent]    at android[backcolor=transparent].[backcolor=transparent]app[backcolor=transparent].[backcolor=transparent]ActivityThread[backcolor=transparent].[backcolor=transparent]main[backcolor=transparent]([backcolor=transparent]ActivityThread[backcolor=transparent].[backcolor=transparent]java[backcolor=transparent]:[backcolor=transparent]5017[backcolor=transparent])
  10. [backcolor=transparent]    at java[backcolor=transparent].[backcolor=transparent]lang[backcolor=transparent].[backcolor=transparent]reflect[backcolor=transparent].[backcolor=transparent]Method[backcolor=transparent].[backcolor=transparent]invokeNative[backcolor=transparent]([backcolor=transparent]Native[backcolor=transparent] [backcolor=transparent]Method[backcolor=transparent])
  11. [backcolor=transparent]    at java[backcolor=transparent].[backcolor=transparent]lang[backcolor=transparent].[backcolor=transparent]reflect[backcolor=transparent].[backcolor=transparent]Method[backcolor=transparent].[backcolor=transparent]invoke[backcolor=transparent]([backcolor=transparent]Method[backcolor=transparent].[backcolor=transparent]java[backcolor=transparent]:[backcolor=transparent]515[backcolor=transparent])
  12. [backcolor=transparent]    at com[backcolor=transparent].[backcolor=transparent]android[backcolor=transparent].[backcolor=transparent]internal[backcolor=transparent].[backcolor=transparent]os[backcolor=transparent].[backcolor=transparent]ZygoteInit$MethodAndArgsCaller[backcolor=transparent].[backcolor=transparent]run[backcolor=transparent]([backcolor=transparent]ZygoteInit[backcolor=transparent].[backcolor=transparent]java[backcolor=transparent]:[backcolor=transparent]779[backcolor=transparent])
  13. [backcolor=transparent]    at com[backcolor=transparent].[backcolor=transparent]android[backcolor=transparent].[backcolor=transparent]internal[backcolor=transparent].[backcolor=transparent]os[backcolor=transparent].[backcolor=transparent]ZygoteInit[backcolor=transparent].[backcolor=transparent]main[backcolor=transparent]([backcolor=transparent]ZygoteInit[backcolor=transparent].[backcolor=transparent]java[backcolor=transparent]:[backcolor=transparent]595[backcolor=transparent])
  14. [backcolor=transparent]    at dalvik[backcolor=transparent].[backcolor=transparent]system[backcolor=transparent].[backcolor=transparent]NativeStart[backcolor=transparent].[backcolor=transparent]main[backcolor=transparent]([backcolor=transparent]Native[backcolor=transparent] [backcolor=transparent]Method[backcolor=transparent])
  15. [backcolor=transparent]public[backcolor=transparent] [backcolor=transparent]class[backcolor=transparent] [backcolor=transparent]MainActivity[backcolor=transparent] [backcolor=transparent]extends[backcolor=transparent] [backcolor=transparent]Activity[backcolor=transparent] [backcolor=transparent]{
  16. [backcolor=transparent]    [backcolor=transparent]private[backcolor=transparent] [backcolor=transparent]IDictionaryManager[backcolor=transparent] mDictionaryManager[backcolor=transparent];
  17. [backcolor=transparent]    [backcolor=transparent]@Override
  18. [backcolor=transparent]    [backcolor=transparent]protected[backcolor=transparent] [backcolor=transparent]void[backcolor=transparent] onCreate[backcolor=transparent]([backcolor=transparent]Bundle[backcolor=transparent] savedInstanceState[backcolor=transparent])[backcolor=transparent] [backcolor=transparent]{
  19. [backcolor=transparent]        [backcolor=transparent]super[backcolor=transparent].[backcolor=transparent]onCreate[backcolor=transparent]([backcolor=transparent]savedInstanceState[backcolor=transparent]);
  20. [backcolor=transparent]        setContentView[backcolor=transparent]([backcolor=transparent]R[backcolor=transparent].[backcolor=transparent]layout[backcolor=transparent].[backcolor=transparent]activity_main[backcolor=transparent]);
  21. [backcolor=transparent]        [backcolor=transparent]Intent[backcolor=transparent] intent [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent]new[backcolor=transparent] [backcolor=transparent]Intent[backcolor=transparent]();
  22. [backcolor=transparent]        intent[backcolor=transparent].[backcolor=transparent]setAction[backcolor=transparent]([backcolor=transparent]"android.intent.action.DictionaryManagerService"[backcolor=transparent]);
  23. [backcolor=transparent]        intent[backcolor=transparent].[backcolor=transparent]setPackage[backcolor=transparent]([backcolor=transparent]"com.wanginbeijing.dictionaryserver"[backcolor=transparent]);
  24. [backcolor=transparent]        bindService[backcolor=transparent]([backcolor=transparent]intent[backcolor=transparent],[backcolor=transparent] mConnection[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]Context[backcolor=transparent].[backcolor=transparent]BIND_AUTO_CREATE[backcolor=transparent]);
  25. [backcolor=transparent]        [backcolor=transparent]//添加一个新单词
  26. [backcolor=transparent]        findViewById[backcolor=transparent]([backcolor=transparent]R[backcolor=transparent].[backcolor=transparent]id[backcolor=transparent].[backcolor=transparent]btn_add[backcolor=transparent]).[backcolor=transparent]setOnClickListener[backcolor=transparent]([backcolor=transparent]new[backcolor=transparent] [backcolor=transparent]View[backcolor=transparent].[backcolor=transparent]OnClickListener[backcolor=transparent]()[backcolor=transparent] [backcolor=transparent]{
  27. [backcolor=transparent]            [backcolor=transparent]@Override
  28. [backcolor=transparent]            [backcolor=transparent]public[backcolor=transparent] [backcolor=transparent]void[backcolor=transparent] onClick[backcolor=transparent]([backcolor=transparent]View[backcolor=transparent] view[backcolor=transparent])[backcolor=transparent] [backcolor=transparent]{
  29. [backcolor=transparent]                [backcolor=transparent]try[backcolor=transparent] [backcolor=transparent]{
  30. [backcolor=transparent]                    mDictionaryManager[backcolor=transparent].[backcolor=transparent]add[backcolor=transparent]([backcolor=transparent]"你好"[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]"Hello"[backcolor=transparent]);
  31. [backcolor=transparent]                [backcolor=transparent]}[backcolor=transparent] [backcolor=transparent]catch[backcolor=transparent] [backcolor=transparent]([backcolor=transparent]RemoteException[backcolor=transparent] e[backcolor=transparent])[backcolor=transparent] [backcolor=transparent]{
  32. [backcolor=transparent]                    e[backcolor=transparent].[backcolor=transparent]printStackTrace[backcolor=transparent]();
  33. [backcolor=transparent]                [backcolor=transparent]}
  34. [backcolor=transparent]            [backcolor=transparent]}
  35. [backcolor=transparent]        [backcolor=transparent]});
  36. [backcolor=transparent]        [backcolor=transparent]//查询单词
  37. [backcolor=transparent]        findViewById[backcolor=transparent]([backcolor=transparent]R[backcolor=transparent].[backcolor=transparent]id[backcolor=transparent].[backcolor=transparent]btn_query[backcolor=transparent]).[backcolor=transparent]setOnClickListener[backcolor=transparent]([backcolor=transparent]new[backcolor=transparent] [backcolor=transparent]View[backcolor=transparent].[backcolor=transparent]OnClickListener[backcolor=transparent]()[backcolor=transparent] [backcolor=transparent]{
  38. [backcolor=transparent]            [backcolor=transparent]@Override
  39. [backcolor=transparent]            [backcolor=transparent]public[backcolor=transparent] [backcolor=transparent]void[backcolor=transparent] onClick[backcolor=transparent]([backcolor=transparent]View[backcolor=transparent] view[backcolor=transparent])[backcolor=transparent] [backcolor=transparent]{
  40. [backcolor=transparent]                [backcolor=transparent]try[backcolor=transparent] [backcolor=transparent]{
  41. [backcolor=transparent]                    [backcolor=transparent]String[backcolor=transparent] english [backcolor=transparent]=[backcolor=transparent] mDictionaryManager[backcolor=transparent].[backcolor=transparent]query[backcolor=transparent]([backcolor=transparent]"你好"[backcolor=transparent]);
  42. [backcolor=transparent]                    [backcolor=transparent]Toast[backcolor=transparent].[backcolor=transparent]makeText[backcolor=transparent]([backcolor=transparent]MainActivity[backcolor=transparent].[backcolor=transparent]this[backcolor=transparent],[backcolor=transparent]english[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]Toast[backcolor=transparent].[backcolor=transparent]LENGTH_SHORT[backcolor=transparent]).[backcolor=transparent]show[backcolor=transparent]();
  43. [backcolor=transparent]                [backcolor=transparent]}[backcolor=transparent] [backcolor=transparent]catch[backcolor=transparent] [backcolor=transparent]([backcolor=transparent]RemoteException[backcolor=transparent] e[backcolor=transparent])[backcolor=transparent] [backcolor=transparent]{
  44. [backcolor=transparent]                    e[backcolor=transparent].[backcolor=transparent]printStackTrace[backcolor=transparent]();
  45. [backcolor=transparent]                [backcolor=transparent]}
  46. [backcolor=transparent]            [backcolor=transparent]}
  47. [backcolor=transparent]        [backcolor=transparent]});
  48. [backcolor=transparent]    [backcolor=transparent]}
  49. [backcolor=transparent]    [backcolor=transparent]private[backcolor=transparent] [backcolor=transparent]ServiceConnection[backcolor=transparent] mConnection [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent]new[backcolor=transparent] [backcolor=transparent]ServiceConnection[backcolor=transparent]()[backcolor=transparent] [backcolor=transparent]{
  50. [backcolor=transparent]        [backcolor=transparent]@Override
  51. [backcolor=transparent]        [backcolor=transparent]public[backcolor=transparent] [backcolor=transparent]void[backcolor=transparent] onServiceConnected[backcolor=transparent]([backcolor=transparent]ComponentName[backcolor=transparent] componentName[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]IBinder[backcolor=transparent] iBinder[backcolor=transparent])[backcolor=transparent] [backcolor=transparent]{
  52. [backcolor=transparent]            [backcolor=transparent]IDictionaryManager[backcolor=transparent] dictionaryManager [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent]IDictionaryManager[backcolor=transparent].[backcolor=transparent]Stub[backcolor=transparent].[backcolor=transparent]asInterface[backcolor=transparent]([backcolor=transparent]iBinder[backcolor=transparent]);
  53. [backcolor=transparent]            [backcolor=transparent]try[backcolor=transparent] [backcolor=transparent]{
  54. [backcolor=transparent]                mDictionaryManager [backcolor=transparent]=[backcolor=transparent] dictionaryManager[backcolor=transparent];
  55. [backcolor=transparent]                [backcolor=transparent]Toast[backcolor=transparent].[backcolor=transparent]makeText[backcolor=transparent]([backcolor=transparent]MainActivity[backcolor=transparent].[backcolor=transparent]this[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]"connect success"[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]Toast[backcolor=transparent].[backcolor=transparent]LENGTH_SHORT[backcolor=transparent]).[backcolor=transparent]show[backcolor=transparent]();
  56. [backcolor=transparent]            [backcolor=transparent]}[backcolor=transparent] [backcolor=transparent]catch[backcolor=transparent] [backcolor=transparent]([backcolor=transparent]Exception[backcolor=transparent] e[backcolor=transparent])[backcolor=transparent] [backcolor=transparent]{
  57. [backcolor=transparent]                [backcolor=transparent]Toast[backcolor=transparent].[backcolor=transparent]makeText[backcolor=transparent]([backcolor=transparent]MainActivity[backcolor=transparent].[backcolor=transparent]this[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]"connect failed"[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]Toast[backcolor=transparent].[backcolor=transparent]LENGTH_SHORT[backcolor=transparent]).[backcolor=transparent]show[backcolor=transparent]();
  58. [backcolor=transparent]                e[backcolor=transparent].[backcolor=transparent]printStackTrace[backcolor=transparent]();
  59. [backcolor=transparent]            [backcolor=transparent]}
  60. [backcolor=transparent]        [backcolor=transparent]}
  61. [backcolor=transparent]        [backcolor=transparent]@Override
  62. [backcolor=transparent]        [backcolor=transparent]public[backcolor=transparent] [backcolor=transparent]void[backcolor=transparent] onServiceDisconnected[backcolor=transparent]([backcolor=transparent]ComponentName[backcolor=transparent] name[backcolor=transparent])[backcolor=transparent] [backcolor=transparent]{
  63. [backcolor=transparent]        [backcolor=transparent]}
  64. [backcolor=transparent]    [backcolor=transparent]};
  65. [backcolor=transparent]}

参考文献:
1.https://developer.android.com/reference/android/os/TransactionTooLargeException.html
2.http://stackoverflow.com/questions/11451393/what-to-do-on-transactiontoolargeexception
3.https://halfstackdeveloper.github.io/2016/09/10/Android-Binder%E8%A7%A3%E5%AF%86/

展开
收起
猫饭先生 2017-10-25 10:25:23 1510 分享 版权
0 条回答
写回答
取消 提交回答
问答分类:
问答标签:
问答地址: