передача байта [] между действиями приводит к сбою приложения, но передача одного и того же байта [] между фрагментами работает хорошо - PullRequest
0 голосов
/ 21 января 2020

У меня есть изображение, и я хочу показать это изображение на фрагменте другого занятия. Я передаю байт [] между сбоями приложения активности, но передаю один и тот же байт [] между фрагментами, это работает хорошо, и все ошибки в logcat стираются.

Я использую этот код в Activity1

 Intent intent = new Intent(getActivity(), Main2Activity.class);
    Bundle bundle = new Bundle();
    bundle.putByteArray("imgByte", imgByte);
    bundle.putString("ItemID", ItemID);
    bundle.putString("ShopID", ShopID);
    bundle.putString("odertime", ordertiming);
    bundle.putString("cat_name", "show_offer_details");

    intent.putExtras(bundle);


    startActivity(intent);

и чтобы получить это намерение в Activity2, и у меня есть фрагмент в Activity2, где я хочу показать этот байт []

 Bundle bundle = getIntent().getExtras();

    if (bundle != null) {

        cat_name = bundle.getString("cat_name");
        imgByte = bundle.getByteArray("imgByte");
        ShopID = bundle.getString("ShopID");
        ItemID = bundle.getString("ItemID");
        ordertiming = bundle.getString("ordertiming");
        bundle.clear();

    }

и для передачи фрагмента Activity2 я использую это код

 FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        details details = new details ();


        Bundle args = new Bundle();
        args.putByteArray("imgByte", imgByte);
        args.putString("ItemID", ItemID);
        args.putString("ShopID", ShopID);
        args.putString("odertime", ordertiming);

        details .setArguments(args);

        fragmentTransaction.replace(R.id.cat_container, details , "details ");
        fragmentTransaction.commit();

, но его сбой и все ошибки стираются в logcat.

пока я передаю один и тот же байт [] в двух фрагментах, он работает нормально.

есть ли какое-нибудь решение для этой ситуации?

1 Ответ

0 голосов
/ 21 января 2020

Передача данных между двумя фрагментами происходит исключительно в вашем собственном процессе.

Передача данных с помощью Intent дополнительных (или других частей Intent) между двумя действиями включает в себя несколько процессов:

  • Существует межпроцессный вызов (IP C) из вашего процесса в процесс основной операционной системы

  • Существует вызов IP C от эта основная операционная система вернется к вашему процессу

Из-за этого существуют ограничения по размеру Intent. Не передавайте большие вещи между действиями через Intent. Вместо этого: либо

  • Использовать фрагменты, либо

  • Использовать одноэлементное хранилище, которое предлагает кэш, чтобы вы могли передавать идентификатор между действия и второе действие могут получить данные из кэша

...