Подтвердить что ты не робот

Ошибка stackoverflow при просмотре перетаскивания

Я использую ondragListener для просмотра перетаскивания. Мой корень viewgroup с большим количеством контейнеров viewgroup в корневой каталог и добавляет в контейнеры такие представления, как imageview/textview.

Если я использую единственный контейнер (viewgroup), например linearlayout для перетаскивания и прекращения его работы, но если я начну добавлять в эти контейнеры представления, такие как imageview, и все же перетаскивая точки, это контейнеры, содержащие только этот вид.

onActionDrop получает stackoverflow error : stack size 8MB.

onActionDrop код:

if (e.getAction()==DragEvent.ACTION_DROP) {
        final View view = (View) e.getLocalState();
        final ViewGroup from = (ViewGroup) view.getParent();
        from.removeView(view);
        final LinearLayout toView = (LinearLayout) v;
        toView.addView(view);}

Журналы ошибок:

 java.lang.StackOverflowError: stack size 8MB
    android.view.ViewGroup.resetResolvedLayoutDirection(ViewGroup.java:6546)
    android.os.TransactionTooLargeException: data parcel size 26840220 bytes
android.os.BinderProxy.transactNative(Native Method)
android.os.BinderProxy.transact(Binder.java:503)
android.app.ActivityManagerProxy.handleApplicationCrash(ActivityManagerNative.java:4425)
com.android.internal.os.RuntimeInit$UncaughtHandler.uncaughtException(RuntimeInit.java:90)
java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693)
java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690)
4b9b3361

Ответ 1

Я думаю, вам следует искать исключение TransactionTooLarge вместо StackOverflow. TransactionTooLarge иногда может быть трудно отследить, но обычно это связано со слишком большим количеством данных, отправляемых между Activity/Fragment или хранимым в savedInstanceState. Как отметил @eduyayo в комментарии выше, вы можете взглянуть на это сообщение:

Что делать с TransactionTooLargeException

Я испытал подобную ошибку некоторое время назад, и это произошло из-за того, что огромный массив был передан из Activity в Fragment, и сама авария произошла в совершенно случайном месте.