অ্যান্ড্রয়েড: java.lang.OutOfMemoryError: ওএম অবধি 2097152 ফ্রি বাইট এবং 2 এমবি দিয়ে 23970828 বাইট বরাদ্দ বরাদ্দ করতে ব্যর্থ হয়েছে


355

আমি ইতিমধ্যে সঞ্চিত এসডি কার্ড থেকে ইমেজভিউতে বিটম্যাপ চিত্রটি দেখতে চাই । রান করার পরে আমার অ্যাপ্লিকেশনটি ক্র্যাশ হয়ে গেছে এবং আউট অফ মেমরিরির ত্রুটি এর:

(java.lang.OutOfMemoryError: 2097152 ফ্রি বাইট এবং ওএম অবধি 2 এমবি দিয়ে 23970828 বাইট বরাদ্দ দিতে ব্যর্থ হয়েছে)

আমার কোনও ধারণা নেই বা কেন এটির স্মৃতিশক্তি নেই। আমি মনে করি আমার চিত্রের আকার খুব বড় তাই আমি এটি পরিবর্তন করার চেষ্টা করেছি।

Iterator<String> it = imageArray.iterator();
while (it.hasNext()) {
  Object element = it.next();
  String objElement = element.toString();
  Log.e("objElement ", " = " + objElement);
  final ImageView imageView = new ImageView (getContext());
  final ProgressBar pBar = new ProgressBar(getContext(), null, 
                                           android.R.attr.progressBarStyleSmall);
  imageView.setTag(it);
  pBar.setTag(it);

  imageView.setImageResource(R.drawable.img_placeholder);
  pBar.setVisibility(View.VISIBLE);

  if (objElement.endsWith(mp3_Pattern)) {
     Log.e("Mp3 ", " ends with ");
     pBar.setVisibility(View.GONE);
     imageView.setImageResource(R.drawable.audio_control);
  }
  if (objElement.endsWith(png_Pattern)) {
     Bitmap bitmap = BitmapFactory.decodeFile(objElement);
     int size = Math.min(bitmap.getWidth(), bitmap.getHeight());
     int x = (bitmap.getWidth() - size) / 2;
     int y = (bitmap.getHeight() - size) / 2;
     Bitmap bitmap_Resul = Bitmap.createBitmap(bitmap, x, y, size, size);
     Log.e("bitmap_Resul "," = "+ bitmap_Resul);

     if (bitmap_Resul != bitmap) {
        bitmap.recycle();
     }
     imageView.setImageBitmap(bitmap_Resul);
     Log.e("png_Pattern ", " ends with ");
     Log.e(" bitmap "," = " + bitmap);
  }

  holder.linearLayout.addView(imageView);
  holder.linearLayout.addView(pBar);

লগ বিড়াল তথ্য:

08-27 14:11:15.307    1857-1857/? E/AndroidRuntime FATAL EXCEPTION: main
    Process: com.example.tazeen.classnkk, PID: 1857
    java.lang.OutOfMemoryError: Failed to allocate a 23970828 byte allocation with 2097152 free bytes and 2MB until OOM
            at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
            at android.graphics.Bitmap.nativeCreate(Native Method)
            at android.graphics.Bitmap.createBitmap(Bitmap.java:812)
            at android.graphics.Bitmap.createBitmap(Bitmap.java:789)
            at android.graphics.Bitmap.createBitmap(Bitmap.java:709)
            at android.graphics.Bitmap.createBitmap(Bitmap.java:634)
            at com.example.tazeen.classnkk.AllPosts_Page$MyListAdapter.getView(AllPosts_Page.java:357)
            at android.widget.AbsListView.obtainView(AbsListView.java:2347)
            at android.widget.ListView.makeAndAddView(ListView.java:1864)
            at android.widget.ListView.fillDown(ListView.java:698)
            at android.widget.ListView.fillFromTop(ListView.java:759)
            at android.widget.ListView.layoutChildren(ListView.java:1659)
            at android.widget.AbsListView.onLayout(AbsListView.java:2151)
            at android.view.View.layout(View.java:15671)
            at android.view.ViewGroup.layout(ViewGroup.java:5038)
            at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703)
            at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557)
            at android.widget.LinearLayout.onLayout(LinearLayout.java:1466)
            at android.view.View.layout(View.java:15671)
            at android.view.ViewGroup.layout(ViewGroup.java:5038)
            at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579)
            at android.widget.FrameLayout.onLayout(FrameLayout.java:514)
            at android.view.View.layout(View.java:15671)
            at android.view.ViewGroup.layout(ViewGroup.java:5038)
            at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703)
            at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557)
            at android.widget.LinearLayout.onLayout(LinearLayout.java:1466)
            at android.view.View.layout(View.java:15671)
            at android.view.ViewGroup.layout(ViewGroup.java:5038)
            at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579)
            at android.widget.FrameLayout.onLayout(FrameLayout.java:514)
            at android.view.View.layout(View.java:15671)
            at android.view.ViewGroup.layout(ViewGroup.java:5038)
            at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2086)
            at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1843)
            at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1061)
            at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5885)
            at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
            at android.view.Choreographer.doCallbacks(Choreographer.java:580)
            at android.view.Choreographer.doFrame(Choreographer.java:550)
            at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
            at android.os.Handler.handleCallback(Handler.java:739)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5257)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

4
চিত্রটির পিক্সেলগুলি পরীক্ষা করুন, প্রস্থটি অবশ্যই 1440 এবং উচ্চতা 2560 এর বেশি হবে না, এটি করে এটি আউট অফ মেমরিরির
পঙ্কজ লিলান

1
@ পঙ্কজলিলান আপনি এই মানগুলি কোথায় পেলেন (1440 এক্স 2560)? অ্যান্ড্রয়েড ডকুমেন্টেশন থেকে কোন রেফারেন্স?
LCJ

উত্তর:


525

বিশেষত বিটম্যাপগুলি নিয়ে কাজ করার সময় অ্যান্ড্রয়েডে আউটআফমিউরিওরর সবচেয়ে সাধারণ সমস্যা। এই ত্রুটিটি জাভা ভার্চুয়াল মেশিন (জেভিএম) দ্বারা ছুঁড়ে ফেলা হয়েছে যখন মেমরির জায়গার অভাবে কোনও বস্তু বরাদ্দ করা যায় না এবং আবর্জনা সংগ্রহকারী কিছু জায়গা মুক্ত করতে পারে না।

আলেকসি দ্বারা উল্লিখিত হিসাবে, আপনি আপনার ম্যানিফেস্ট ফাইলে নীচে সত্তা যুক্ত করতে পারেন android:hardwareAccelerated="false", android:largeHeap="true"এটি কিছু পরিবেশের জন্য কাজ করবে।

<application
    android:allowBackup="true"
    android:hardwareAccelerated="false"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:largeHeap="true"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">

আপনার অবশ্যই অ্যান্ড্রয়েড বিকাশকারী ধারণার কয়েকটি অবশ্যই পড়তে হবে, বিশেষভাবে এখানে: বিটম্যাপগুলি দক্ষতার সাথে প্রদর্শন করা

সমস্ত 5 টি বিষয় পড়ুন এবং আপনার কোডটি আবার লিখুন। যদি এটি এখনও কাজ না করে তবে আমরা টিউটোরিয়াল উপাদানের সাথে কী ভুল করেছি তা দেখে আমরা খুশি হব।

এসওএফ-তে ত্রুটিগুলির এই ধরণের জন্য কয়েকটি সম্ভাব্য উত্তর

অ্যান্ড্রয়েড: বিটম্যাপফ্যাক্টরি.ডেকোড স্ট্রিম () 2 এমবি ফ্রি হিপ সহ একটি 400 কেবি ফাইল সহ মেমরির বাইরে

অ্যান্ড্রয়েডে java.lang.OutOfMemoryError ঝামেলা কীভাবে সমাধান করবেন

অ্যান্ড্রয়েড: java.lang.OutOfMemoryError

java.lang.OutOfMemoryError

আউটআফমিউরিওরিরের সমাধান: বিটম্যাপ আকার ভিএম বাজেটের চেয়ে বেশি

সম্পাদনা করুন: @ সিজনাশের মন্তব্য থেকে

এই লাইনটি যুক্ত করার পরেও যে কারও ক্রাশ হয়েছে তার জন্য, আপনার চিত্রটি আপনার রেজোল / অঙ্কনযোগ্য / পরিবর্তনের পরিবর্তে আপনার রেজোল / ড্রইবল-এক্সএইচডিপি / ফোল্ডারে আটকে দেওয়ার চেষ্টা করুন এবং এটি আপনার সমস্যার সমাধান করতে পারে।


1
আপনি কীভাবে পোস্টটি দিতে পারেন শেষ পর্যন্ত কীভাবে সমস্যাটি সমাধান করলেন? কারণ আমারও একই সমস্যা ... আসলে আপনি নিজের ম্যানিফেস্টে এই লাইনগুলি যুক্ত করতে পারেন অ্যান্ড্রয়েড: হার্ডওয়্যারঅ্যাক্সিলারেটেড = "মিথ্যা", অ্যান্ড্রয়েড: লার্জহীপ = "সত্য" এটি কিছু পরিস্থিতিতে কাজ করছে, তবে সচেতন থাকুন যে কোডের অন্য একটি অংশ পারে এ নিয়ে তর্ক করুন ...
আলেকসি টিমোশচেঙ্কো

6
এটি যুক্ত করার পরে অ্যাপ নেভিগেশন খুব ধীর হয়ে উঠছে।
উমা আচন্ত

10
অ্যান্ড্রয়েড: হার্ডওয়্যারঅ্যাক্সিলারেটেড = "মিথ্যা" আপনার অ্যাপ্লিকেশন
হিম

1
এই লাইনটি যুক্ত করার পরেও যে কারও ক্রাশ হয়েছে তার জন্য, আপনার চিত্রটি আপনার রেজোল / অঙ্কনযোগ্য / পরিবর্তনের পরিবর্তে আপনার রেজোল / ড্রইবল-এক্সএইচডিপি / ফোল্ডারে আটকে দেওয়ার চেষ্টা করুন এবং এটি আপনার সমস্যার সমাধান করতে পারে।
cjnash

6
আপনি অ্যান্ড্রয়েডের পরামর্শ কেন দেবেন: হার্ডওয়্যারঅ্যাক্সিলারেটেড = "মিথ্যা? এর কী লাভ?
ব্যাটম্যাকি

86

আপনি কি অ্যাপ্লিকেশনগুলির অধীনে আপনার ম্যানিফেস্টে এটি যুক্ত করার চেষ্টা করেছেন? android:largeHeap="true"?

এটার মত

  <application
      android:name=".ParaseApplication"
      android:allowBackup="true"
      android:icon="@mipmap/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppTheme"
      android:largeHeap="true" >

17
আমি এই অ্যান্ড্রয়েডটি দিয়ে চেষ্টা করেছি: বৃহত্তর = "সত্য" তবে একই ত্রুটি
পেয়েছে


1
আপনি এই সাইটের সাথে
পিএনজিও সংক্ষেপ

27

আমার জন্য সমস্যাটি ছিল যে আমার .png ফাইলটি মেমরির ক্ষেত্রে একটি বিশাল বিটম্যাপ হতে ডি-সংকুচিত হচ্ছে, কারণ চিত্রটির খুব বড় মাত্রা ছিল (যদিও ফাইলের আকার ক্ষুদ্র ছিল)।

সুতরাং সমাধানটি কেবল চিত্রটিকে পুনরায় আকার দেওয়ার ছিল :)


3
এটি সঠিক সমাধান, কারণ আমি প্রথমে উপরে সমাধানগুলি চেষ্টা করেছি, তবে প্রয়োগের পরে android:hardwareAccelerated="false", লেআউট শেডোর মতো কিছু অ্যানিমেশন কাজ করছে না। তবে আকার পরিবর্তন করার পরে সমস্ত সমস্যার সমাধান হয়ে গেল আপনাকে ধন্যবাদ! এই ইঙ্গিতটির জন্য +1!
কুশল

1
এই আমার সমস্যা স্থির। আপনাকে @ পেট্রসকে ধন্যবাদ
এনগুইন

27

আসলে আপনি এই লাইনগুলিকে আপনার ম্যানিফেস্টে যুক্ত করতে পারেন android:hardwareAccelerated="false", android:largeHeap="true"এটি কিছু পরিস্থিতিতে কাজ করছে, তবে সচেতন হন যে কোডের অন্য অংশটি এটি নিয়ে তর্ক করতে পারে।

<application
    android:allowBackup="true"
    android:hardwareAccelerated="false"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:largeHeap="true"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">

2
কাজ হয়নি, এটি একই ত্রুটির সাথে ক্র্যাশ হয়েছিল, যখন বিটম্যাপ ক্রিয়েটবিটম্যাপ ব্যবহার করা হয়েছিল
নরেন্দ্র সিং

দুঃখিত @King (আমি এই সমস্যা সমাধান করার জন্য কিছু সময় কাটিয়েছি, এবং এটি আমার জন্য কাজ কিন্তু এটা ঠিক ভাবে এক ... বিভিন্ন পদ্ধতির অনেক আছে।
Aleksey Timoshchenko

2
অ্যান্ড্রয়েডের উদ্দেশ্য কী : হার্ডওয়্যারএক্সিলারেটেড = "মিথ্যা" ?
ইগোরগানাপলস্কি

অফিসিয়াল ডকের কাছ থেকে @ ইগোরগানাপলস্কি বলেছেন .. এই লিঙ্কটি দেখুন
শৈলেন্দ্র মাদদা


11

ইমেজভিউতে এটি সেটআপ করার আগে আপনার চিত্রটিকে পুনরায় আকার দিন :

Bitmap.createScaledBitmap(_yourImageBitmap, _size, _size, false);

যেখানে আকারটি চিত্রের ভিউয়ের প্রকৃত আকার। আপনি পরিমাপ করে আকারে পৌঁছাতে পারেন:

imageView.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));

এবং পরবর্তী আকার imageView.getMeasuredWidth()এবং imageView.getMeasuredHeight()জন্য ব্যবহার করুন scaling


আমি এই অ্যান্ড্রয়েডটি দিয়ে চেষ্টা করেছি: বৃহত্হাপ = "সত্য" তবে একই ত্রুটি
পেয়েছে

এটি অগত্যা কেন কাজ করবে না তার আরও একটি উদাহরণ (ব্যক্তিগত অ্যাপ্লিকেশন স্টোরেজ ব্যবহার করে): রেজ / ড্রয়যোগ্য / তে একটি বিটম্যাপ স্থাপন করা একই ত্রুটি দিতে পারে তবে প্রতিবার তা ঘটবে না। পুনরায় / অঙ্কনযোগ্য-এক্সএইচডিপিআই / তে একই বিটম্যাপ স্থাপনের ফলে আর ত্রুটি থাকবে না। সুতরাং একটি উত্তর হিসাবে, এটি নিজেই সঠিক নয়।
CmosBattery

8

ব্যবহারের পিছলান লাইব্রেরী এবং কম মাপ ওভাররাইড আকার;

Glide.with(mContext).load(imgID).asBitmap().override(1080, 600).into(mImageView);

6

আমি ত্রুটি নীচে পেয়েছি

"ই / আর্ট: থ্রোিং আউট মেমরিরির" ওওএম অবধি 16777120 ফ্রি বাইট এবং 23 এমবি দিয়ে 47251468 বাইট বরাদ্দ বরাদ্দ করতে ব্যর্থ হয়েছে "

যোগ করার পরে android:largeHeap="true"মধ্যে Andro আইডি তারপর আমি সমস্ত ত্রুটি পরিত্রাণ

<application
    android:allowBackup="true"
    android:icon="@mipmap/guruji"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:largeHeap="true"
    android:theme="@style/AppTheme">

4

আমি চিত্রটি কম আকারে পুনরায় আকার দিয়ে এই সমস্যার সমাধান করেছি। আমি xamarin ফর্ম ব্যবহার করছি। পিএনজি চিত্রের আকার হ্রাস করা সমস্যার সমাধান করেছে।


4

ইস্যু: ওওএম অবধি 16777120 ফ্রি বাইট এবং 17 এমবি দিয়ে একটি 37748748 বাইট বরাদ্দ দিতে ব্যর্থ হয়েছে

সমাধান: 1. আপনার ম্যানিফেস্ট ফাইলটি খুলুন ২. অ্যাপ্লিকেশন ট্যাগের ভিতরে কেবল দুটি লাইনের নীচে যুক্ত করুন

 android:hardwareAccelerated="false"
 android:largeHeap="true"

উদাহরণ:

 <application
        android:allowBackup="true"
        android:hardwareAccelerated="false"
        android:largeHeap="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

4

আমি খুঁজে পেয়েছি যে 'ড্রয়যোগ্য' ফোল্ডারের চিত্রগুলি হাই ডিএফ ফোনে অনেক বড় চিত্রে রূপান্তরিত হবে। উদাহরণস্বরূপ, 200k চিত্রটি 800k বা 32000k এর মতো উচ্চতর আকারে পুনরায় তৈরি করা হবে। আমার নিজের এটি আবিষ্কার করতে হয়েছিল এবং আজ অবধি এই হিপ মেমরি ট্র্যাপের জন্য ডকুমেন্টেশন দেখেনি। এটি প্রতিরোধ করতে আমি সবকিছুই একটি অঙ্কনযোগ্য-নোডপি ফোল্ডারে রেখেছি (নির্দিষ্ট ডিভাইস হিপের উপর ভিত্তি করে বিটম্যাপফ্যাক্টরিতে 'অপশনগুলি ব্যবহার করার পাশাপাশি)। একাধিক অঙ্কনযোগ্য ফোল্ডারগুলির সাথে আমার অ্যাপ্লিকেশনটির আকারটি স্ফীত হয়ে উঠতে পারে না, বিশেষত স্ক্রিন ডিফের পরিসর এখন এত বিশাল। জটিল জিনিসটি এখন স্টুডিওতে বিশেষভাবে প্রকল্পের দৃশ্যে যেমন 'অঙ্কনযোগ্য-নোডপি' ফোল্ডারটি নির্দেশ করে না, এটি কেবল একটি 'আঁকিয়ে' ফোল্ডার দেখায়। আপনি যদি সাবধান না হন, আপনি যখন স্টুডিওতে এই ফোল্ডারে কোনও চিত্র ফেলে দেবেন, তখন এটি জিতবে '

Careful here 'backgroundtest' did not actually go to drawable-nodpi and will 
be resampled higher, such as 4x or 16x of the original dimensions for high def screens.

এখানে চিত্র বর্ণনা লিখুন

কথোপকথনের নোডপি ফোল্ডারে নীচে ক্লিক করার বিষয়টি নিশ্চিত করুন, কারণ প্রকল্পের ভিউ আপনাকে সমস্ত আঁকতে সক্ষম ফোল্ডারগুলি আগের মতো আলাদাভাবে প্রদর্শন করবে না, তাই এটি তাত্ক্ষণিকভাবে স্পষ্ট হবে না যে এটি ভুল হয়ে গেছে। অনেক আগে আমি এটি মুছে ফেলার পরে স্টুডিওটি আমার জন্য ভ্যানিলাটিকে 'অঙ্কনযোগ্য' পুনরায় তৈরি করেছিল:

এখানে চিত্র বর্ণনা লিখুন


3

এটি আমার জন্য কাজ করেছে: কেবল ছবি আঁকতে সক্ষম ফোল্ডার থেকে অঙ্কনযোগ্য-এইচডিপিআইতে স্থানান্তর করুন।


এর ব্যাখ্যা কী? কেন এই চলমান কাজ করে?
হারুন

প্লিজ ব্যাখ্যা করে কেন এই কাজ করে ...?
এক্স-ব্ল্যাক ...

3

সলুটন আপনার ম্যানিফেস্ট ফাইলে এটি ব্যবহার করে দেখুন গ্লাইড লাইব্রেরি

সংকলন 'com.github.bumptech.glide: গ্লাইড: 3.7.0'

    **Use Glide Library and Override size to less size;**

 if (!TextUtils.isEmpty(message.getPicture())) {
            Glide.with(mContext).load(message.getPicture())
                    .thumbnail(0.5f)
                    .crossFade()
                    .transform(new CircleTransform(mContext))
                    .diskCacheStrategy(DiskCacheStrategy.ALL)
                    .into(holder.imgProfile);
        } 

অ্যান্ড্রয়েড hardwareAccelerated = "FALSE"

অ্যান্ড্রয়েড largeHeap = "সত্য"

<application
    android:allowBackup="true"
    android:hardwareAccelerated="false"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:largeHeap="true"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">

এই গ্রন্থাগারটি ব্যবহার করুন

  compile 'com.github.bumptech.glide:glide:3.7.0'   

এর ওয়ার্কিং হ্যাপি কোডিং

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.Paint;

import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool;
import com.bumptech.glide.load.resource.bitmap.BitmapTransformation;


public class CircleTransform extends BitmapTransformation {
    public CircleTransform(Context context) {
        super(context);
    }

    @Override
    protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {
        return circleCrop(pool, toTransform);
    }

    private static Bitmap circleCrop(BitmapPool pool, Bitmap source) {
        if (source == null) return null;

        int size = Math.min(source.getWidth(), source.getHeight());
        int x = (source.getWidth() - size) / 2;
        int y = (source.getHeight() - size) / 2;

        // TODO this could be acquired from the pool too
        Bitmap squared = Bitmap.createBitmap(source, x, y, size, size);

        Bitmap result = pool.get(size, size, Bitmap.Config.ARGB_8888);
        if (result == null) {
            result = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888);
        }

        Canvas canvas = new Canvas(result);
        Paint paint = new Paint();
        paint.setShader(new BitmapShader(squared, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));
        paint.setAntiAlias(true);
        float r = size / 2f;
        canvas.drawCircle(r, r, r, paint);
        return result;
    }

    @Override
    public String getId() {
        return getClass().getName();
    }
}

3

অ্যাপ্লিকেশনগুলির অধীনে এটি আপনার ম্যানিফেস্টে যুক্ত করবেন? অ্যান্ড্রয়েড largeHeap = "সত্য"


এছাড়াও আরও একটি সমাধান রয়েছে: উচ্চতা = উচ্চতা * .75 এবং প্রস্থ = প্রস্থ * .75 পরিবর্তন করুন।
সৌরভ ওমর

2

আমারও সমস্যা ছিল।

উপরের অন্যান্য বেশিরভাগের সাথে একই। সমস্যাটি বিশাল চিত্রের কারণে ঘটে।

কিছু চিত্রের আকার পরিবর্তন করুন এবং কোনও কোড পরিবর্তন করার দরকার নেই।


2

কিছু ক্ষেত্রে (যেমন লুপের ক্রিয়াকলাপ) আবর্জনা সংগ্রহকারী আপনার কোডের চেয়ে ধীরআবর্জনা সংগ্রহকারীর জন্য অপেক্ষা করার জন্য আপনি এই উত্তরটি থেকে একটি সহায়ক পদ্ধতি ব্যবহার করতে পারেন ।


1

আমি অ্যান্ড্রয়েড বিকাশে একজন নবাগত কিন্তু আমি আশা করি আমার সমাধানটি সহায়তা করবে, এটি আমার অবস্থার উপর পুরোপুরি কার্যকরভাবে কাজ করে। আমি ইমেজভিউ ব্যবহার করছি এবং এর ব্যাকগ্রাউন্ডটি "এসসিআর" তে সেট করেছি কারণ আমি ফ্রেম অ্যানিমেশন তৈরির চেষ্টা করছি। আমি একই ত্রুটি পেয়েছি কিন্তু যখন আমি কোড করার চেষ্টা করেছি এটি কাজ করে

int ImageID = this.Resources.GetIdentifier(questionPlay[index].Image.ToLower(), "anim", PackageName);
            imgView.SetImageResource(ImageID);
            AnimationDrawable animation = (AnimationDrawable)imgView.Drawable;
            animation.Start();
            animation.Dispose();

1

যখন আমি কোনও নতুন ক্রিয়াকলাপে যাওয়ার সময় আমার পুরানো কার্যকলাপটি বন্ধ না করতাম তখন আমি এই সমস্যায় পড়েছিলাম। আমি এটি দিয়ে স্থিরfinish();

    Intent goToMain = new Intent(this,MainActivity.class);
    startActivity(goToMain);
    finish();

1
Bitmap image =((BitmapDrawable)imageView1.getDrawable()).getBitmap();

ByteArrayOutputStream byteArrayOutputStream=new ByteArrayOutputStream();

image.compress(Bitmap.CompressFormat.JPEG,50/100,byteArrayOutputStream);

50/100 যদি কেউ 100 ব্যবহার করে তবে মূল রেজোলিউশন মেমরির বাইরে থাকার জন্য অ্যাপসটিকে থামিয়ে দিতে পারে।

যদি 50 বা 100 এর কম হয় তবে এটি 50% বা 100 এর কম রেজোলিউশন হতে পারে তাই এটি মেমরির সমস্যা থেকে বেরিয়ে আসবে


1

আপনাকে অঙ্কনযোগ্যতে অবজেক্টের আকার পরিবর্তন করতে হবে। অ্যান্ড্রয়েড প্রদর্শনের জন্য এটি খুব বড়। যেমন আপনি যদি চিত্রটি সেট করেন তবে কম পিক্সেল সহ চিত্র চেষ্টা করুন। এটা আমার জন্য কাজ করে. ধন্যবাদ। :)


1

আপনার অ্যাপ্লিকেশনটি ক্রাশ হচ্ছে কারণ আপনার চিত্রের আকার (এমবি বা কেবিতে) খুব বড় তাই এটি এর জন্য স্থান বরাদ্দ দিচ্ছে না। সুতরাং আপনার ছবিটি ছবি আঁকতে পেষ্ট করার আগে আকারটি হ্রাস করুন।

অথবা

আপনি ম্যানিফেস্ট.এক্সএমএলে অ্যাপ্লিকেশন ট্যাগ অনুসরণ করে যুক্ত করতে পারেন

 android:hardwareAccelerated="false"
    android:largeHeap="true"
    android:allowBackup="true"

এই অ্যাপটি যুক্ত করার পরে ক্রাশ হবে না will

  • অ্যাপে সর্বদা কম আকারের চিত্র ব্যবহার করুন।
  • আপনি যদি অ্যাপে বড় আকারের চিত্র যুক্ত করেন তবে আপনার উপরের সিনটেক্স যুক্ত করা উচিত তবে অ্যাপের আকার বাড়বে।

1

যোগ করার পরে আমার সমস্যা সমাধান হয়েছে

 dexOptions {
        incremental true
        javaMaxHeapSize "4g"
        preDexLibraries true
        dexInProcess = true
    }

বিল্ড.গ্রাডল ফাইলটিতে


এটি কেবলমাত্র আপনার অ্যাপ্লিকেশনটিকে মেমরির ব্যবহারে সত্যই ফুলে
উঠেছে

@ ক্রিকেট_007 এর পরিণতি কি যদি হয়?
শ্রীকান্ত করুণাঘাট

1
Last but not the least....

Try Method One:

Simple Add these lines of code in the gradle file

dexOptions {
        incremental true
        javaMaxHeapSize "4g"
     }

Example:

android {
    compileSdkVersion XX
    buildToolsVersion "28.X.X"

    defaultConfig {
        applicationId "com.example.xxxxx"
        minSdkVersion 14
        targetSdkVersion 19
    }

dexOptions {
        incremental true
        javaMaxHeapSize "4g"
     }
}

*******************************************************************

Method Two:

Add these two lines of code in manifest file...

android:hardwareAccelerated="false" 
android:largeHeap="true"

Example:

<application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:hardwareAccelerated="false"
        android:largeHeap="true"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

It will Work for sure any of these cases.....

0

যদি কোনও চিত্র আপলোড করা হয় তবে চিত্রের গুণমানটি হ্রাস করার চেষ্টা করুন যা বিটম্যাপের দ্বিতীয় প্যারামিটার। এটিই ছিল আমার ক্ষেত্রে সমাধান। আগে এটি 90 ছিল, তারপরে আমি 60 দিয়ে চেষ্টা করেছি (এটি এখন নীচের কোডটিতে রয়েছে)।

Bitmap yourSelectedImage = BitmapFactory.decodeStream(imageStream);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
finalBitmap.compress(Bitmap.CompressFormat.JPEG,60,baos);
byte[] b = baos.toByteArray();

0

সবচেয়ে সহজ চেষ্টা করুন। হতে পারে আপনার অ্যাপ্লিকেশনটি ক্রাশ হচ্ছে কারণ আপনার চিত্রের আকার (এমবিতে) খুব বেশি তাই এটি এর জন্য স্থান বরাদ্দ করছে না। সুতরাং আপনার ছবিটি ছবি আঁকতে পেষ্ট করার আগে কোনও দর্শকের সফ্টওয়্যার দ্বারা আকার হ্রাস করুন বা যদি আপনি গ্যালারী থেকে চিত্রটি গ্রহণ করছেন তবে এটি সংরক্ষণের আগে আপনার বিটম্যাপটি সংকুচিত করে। এটা আমার জন্য কাজ করেছে। অবশ্যই আপনার জন্য হবে।


0
stream = activity.getContentResolver().openInputStream(uri);
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.RGB_565;

bitmap = BitmapFactory.decodeStream(stream, null, options);
int Height = bitmap.getHeight();
int Width = bitmap.getWidth();
enter code here
int newHeight = 1000;
float scaleFactor = ((float) newHeight) / Height;
float newWidth = Width * scaleFactor;

float scaleWidth = scaleFactor;
float scaleHeight = scaleFactor;
Matrix matrix = new Matrix();
matrix.postScale(scaleWidth, scaleHeight);
resizedBitmap= Bitmap.createBitmap(bitmap, 0, 0,Width, Height, matrix, true);
bitmap.recycle();

তারপরে অ্যাপ্লিকেশন ট্যাগে লার্জহীপসাইজ = "সত্য যোগ করুন


0

আমি মনে করি আপনি এই চিত্রটি একটি আইকন হিসাবে ব্যবহার করতে চান। অ্যান্ড্রয়েড যেমন আপনাকে বলছে, আপনার চিত্রটি অনেক বড়। আপনাকে কেবল যা করতে হবে তা হ'ল আপনার চিত্রটি স্কেল করা যাতে কোনও চিত্রের আকার ব্যবহার করতে হবে এবং কখন স্ক্রিন রেজোলিউশন অনুযায়ী অ্যান্ড্রয়েড জানে। এটি সম্পাদন করতে, অ্যান্ড্রয়েড স্টুডিওতে: ১. রিসেট ফোল্ডারে ডান ক্লিক করুন, ২. চিত্রের সম্পদ নির্বাচন করুন icon আইকনটি নির্বাচন করুন ৪. আইকনটিকে একটি নাম দিন As । আপনার এক্সএমএল বা উত্স কোডটিতে কেবলমাত্র সেই চিত্রটি উল্লেখ করুন যা নির্বাচিত সম্পত্তির ধরণ অনুযায়ী লেআউট বা মাইপম্যাপ ফোল্ডারে অবস্থিত হবে। ত্রুটি চলে যাবে।


0

আমি সত্যিই এর মতো ম্যানিফেস্ট সম্পাদনা করার প্রস্তাব দিই না

অ্যান্ড্রয়েড: হার্ডওয়্যারঅ্যাক্সিলারেটেড = "মিথ্যা", অ্যান্ড্রয়েড: লার্জহিপ = "সত্য"

এই বিকল্পগুলির ফলে আপনার অ্যাপ্লিকেশনটিতে মসৃণ অ্যানিমেশন প্রভাব নেই। তদুপরি 'লাইভ ডেটা' বা আপনার স্থানীয় ডিবি (স্ক্লাইট, কক্ষ) পরিবর্তন করা ধীরে ধীরে সক্রিয় করুন। এটি ব্যবহারকারীর অভিজ্ঞতার জন্য খারাপ।

সুতরাং আমি বিটম্যাপটি পুনরায় আকার দেওয়ার প্রস্তাব দিই

নীচে নমুনা কোড দেওয়া আছে

fun resizeBitmap(source: Bitmap): Bitmap {
      val maxResolution = 1000    //edit 'maxResolution' to fit your need
      val width = source.width
      val height = source.height
      var newWidth = width
      var newHeight = height
      val rate: Float

            if (width > height) {
                if (maxResolution < width) {
                    rate = maxResolution / width.toFloat()
                    newHeight = (height * rate).toInt()
                    newWidth = maxResolution
                }
            } else {
                if (maxResolution < height) {
                    rate = maxResolution / height.toFloat()
                    newWidth = (width * rate).toInt()
                    newHeight = maxResolution
                }
            }
            return Bitmap.createScaledBitmap(source, newWidth, newHeight, true)
 }

0

যদি অ্যান্ড্রয়েড: লার্জহীপ = "সত্য" তখন আপনার পক্ষে কাজ করে না

1:

ইমেজ কম্প্রেশন. আমি এই ওয়েবসাইট ব্যবহার করছি

2:

চিত্রগুলি এমডিপিআই, এইচডিপিআই, এক্সএইচডিপিআই, এক্সএক্সএইচডিপি, এক্সএক্সএক্সডিডিপিতে রূপান্তর করুন। আমি এই ওয়েবটিস্ট ব্যবহার করছি

অ্যান্ড্রয়েড অপসারণ করবেন না: largeHeap = "সত্য"!


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.