问题分析:
Binder传输的数据存在Parcel类中,如果Binder的参数或返回值太大(超过1MB),不适合的事务缓冲区,调用会失败,并抛出TransactionTooLargeException。
解决方案:
Binder的参数或返回值太大导致调用失败,并抛出TransactionTooLargeException,建议不要将大量数据传入Binder,避免传入大数组、大量字符串或位图。
代码示例:
- [backcolor=transparent]android[backcolor=transparent].[backcolor=transparent]os[backcolor=transparent].[backcolor=transparent]TransactionTooLargeException
- [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])
- [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])
- [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])
- [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])
- [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])
- [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])
- [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])
- [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])
- [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])
- [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])
- [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])
- [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])
- [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])
- [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]{
- [backcolor=transparent] [backcolor=transparent]private[backcolor=transparent] [backcolor=transparent]IDictionaryManager[backcolor=transparent] mDictionaryManager[backcolor=transparent];
- [backcolor=transparent] [backcolor=transparent]@Override
- [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]{
- [backcolor=transparent] [backcolor=transparent]super[backcolor=transparent].[backcolor=transparent]onCreate[backcolor=transparent]([backcolor=transparent]savedInstanceState[backcolor=transparent]);
- [backcolor=transparent] setContentView[backcolor=transparent]([backcolor=transparent]R[backcolor=transparent].[backcolor=transparent]layout[backcolor=transparent].[backcolor=transparent]activity_main[backcolor=transparent]);
- [backcolor=transparent] [backcolor=transparent]Intent[backcolor=transparent] intent [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent]new[backcolor=transparent] [backcolor=transparent]Intent[backcolor=transparent]();
- [backcolor=transparent] intent[backcolor=transparent].[backcolor=transparent]setAction[backcolor=transparent]([backcolor=transparent]"android.intent.action.DictionaryManagerService"[backcolor=transparent]);
- [backcolor=transparent] intent[backcolor=transparent].[backcolor=transparent]setPackage[backcolor=transparent]([backcolor=transparent]"com.wanginbeijing.dictionaryserver"[backcolor=transparent]);
- [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]);
- [backcolor=transparent] [backcolor=transparent]//添加一个新单词
- [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]{
- [backcolor=transparent] [backcolor=transparent]@Override
- [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]{
- [backcolor=transparent] [backcolor=transparent]try[backcolor=transparent] [backcolor=transparent]{
- [backcolor=transparent] mDictionaryManager[backcolor=transparent].[backcolor=transparent]add[backcolor=transparent]([backcolor=transparent]"你好"[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]"Hello"[backcolor=transparent]);
- [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]{
- [backcolor=transparent] e[backcolor=transparent].[backcolor=transparent]printStackTrace[backcolor=transparent]();
- [backcolor=transparent] [backcolor=transparent]}
- [backcolor=transparent] [backcolor=transparent]}
- [backcolor=transparent] [backcolor=transparent]});
- [backcolor=transparent] [backcolor=transparent]//查询单词
- [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]{
- [backcolor=transparent] [backcolor=transparent]@Override
- [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]{
- [backcolor=transparent] [backcolor=transparent]try[backcolor=transparent] [backcolor=transparent]{
- [backcolor=transparent] [backcolor=transparent]String[backcolor=transparent] english [backcolor=transparent]=[backcolor=transparent] mDictionaryManager[backcolor=transparent].[backcolor=transparent]query[backcolor=transparent]([backcolor=transparent]"你好"[backcolor=transparent]);
- [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]();
- [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]{
- [backcolor=transparent] e[backcolor=transparent].[backcolor=transparent]printStackTrace[backcolor=transparent]();
- [backcolor=transparent] [backcolor=transparent]}
- [backcolor=transparent] [backcolor=transparent]}
- [backcolor=transparent] [backcolor=transparent]});
- [backcolor=transparent] [backcolor=transparent]}
- [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]{
- [backcolor=transparent] [backcolor=transparent]@Override
- [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]{
- [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]);
- [backcolor=transparent] [backcolor=transparent]try[backcolor=transparent] [backcolor=transparent]{
- [backcolor=transparent] mDictionaryManager [backcolor=transparent]=[backcolor=transparent] dictionaryManager[backcolor=transparent];
- [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]();
- [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]{
- [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]();
- [backcolor=transparent] e[backcolor=transparent].[backcolor=transparent]printStackTrace[backcolor=transparent]();
- [backcolor=transparent] [backcolor=transparent]}
- [backcolor=transparent] [backcolor=transparent]}
- [backcolor=transparent] [backcolor=transparent]@Override
- [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]{
- [backcolor=transparent] [backcolor=transparent]}
- [backcolor=transparent] [backcolor=transparent]};
- [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/