Sobes.tech
Middle

TransactionTooLargeException istisnası nədir?

sobes.tech Süni İntellekt

AI-dan cavab

TransactionTooLargeException istisnası, tətbiqin komponentləri arasında (məsələn, Activity-dən Service-ə və ya proseslər arasında) Binder vasitəsilə ötürülən məlumatlar icazə verilən ölçü həddini aşdıqda baş verir.

Binder Android-də proseslərarası əlaqə (IPC) mexanizmidir. O, məlumatların ötürülməsi üçün sabit bir tampona malikdir. Bu tamponun ölçüsü məhduddur, adətən 1 MB-ə qədər (bir az xidmət məlumatı ilə birlikdə). Binder vasitəsilə məlumat ötürməyə çalışarkən və məlumatların ölçüsü bu həddi aşdıqda, sistem TransactionTooLargeException atır.

Bu, adətən aşağıdakı hallarda baş verir:

  • Intent vasitəsilə böyük obyektlərin ötürülməsi (məsələn, serializasiya olunmuş məlumatlar, Bitmaplər).
  • AIDL xidmətləri ilə işləyərkən, metodlar böyük həcmdə məlumatları geri qaytarır və ya qəbul edir.
  • Komponentlər arasında məlumat ötürmək üçün Bundle istifadə edərkən.

Problemi həll etmək üçün yollar:

  • Yalnız lazım olan məlumatları ötürün.
  • Böyük məlumatları yaddaşda və ya diskdə saxlayın və onlara yalnız bir link göndərin (məsələn, URI, identifikator).
  • Böyük həcmdə məlumatlar üçün digər məlumat ötürmə mexanizmlərindən istifadə edin (məsələn, yerli soketlər, media təminatçıları).
  • Böyük məlumatları kiçik hissələrə bölün və bir neçə tranzaksiyada ötürün.
// TransactionTooLargeException-ə səbəb ola biləcək nümunə
Intent intent = new Intent(this, TargetActivity.class);
Bundle bundle = new Bundle();
byte[] largeData = new byte[1024 * 1024 * 2]; // 2MB məlumat
bundle.putByteArray("data", largeData);
intent.putExtra("bundle", bundle);
startActivity(intent); // Burada istisna baş verə bilər