Android: java.lang.OutOfMemoryError: 2097152 मुफ्त बाइट और OMB तक 2MB के साथ 23970828 बाइट आवंटन करने में विफल


355

मैं एसडी कार्ड से ImageView में बिटमैप छवि दिखाना चाहता हूं जो पहले से ही संग्रहीत है। मेरे आवेदन को चलाने के बाद दुर्घटना हो रही है और आउटऑफ़मैरी की त्रुटि मिल रही है:

(java.lang.OutOfMemoryError: 2097152 मुफ्त बाइट और OMB तक 2MB के साथ 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
@PankajLilan आपको ये मान कहाँ से मिले (1440 X 2560)? Android दस्तावेज़ों से कोई संदर्भ?
LCJ

यह भी देखें stackoverflow.com/questions/477572/...
JFreeman

जवाबों:


525

OutOfMemoryError Android में सबसे आम समस्या है, जबकि विशेष रूप से बिटमैप्स के साथ काम करना। यह त्रुटि जावा वर्चुअल मशीन (JVM) द्वारा फेंकी जाती है जब किसी ऑब्जेक्ट को मेमोरी स्पेस की कमी के कारण आवंटित नहीं किया जा सकता है और साथ ही, कचरा कलेक्टर कुछ स्थान खाली नहीं कर सकता है।

जैसा कि अलेक्सी ने उल्लेख किया है, आप अपनी घोषणा फ़ाइल में संस्थाओं से नीचे जोड़ सकते हैं 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">

आपको कुछ Androids डेवलपर कॉन्सेप्ट के बारे में निश्चित रूप से पढ़ना चाहिए, विशेष रूप से यहां: बिटमैप को कुशलतापूर्वक प्रदर्शित करना

सभी 5 विषयों को पढ़ें और अपने कोड को फिर से लिखें। यदि यह अभी भी काम नहीं करता है तो हम यह देखकर खुश होंगे कि आपने ट्यूटोरियल सामग्री के साथ क्या गलत किया है।

SOF में इस प्रकार की त्रुटियों के लिए कुछ संभावित उत्तर यहां दिए गए हैं

एंड्रॉइड: बिटमैपफैक्ट्री। टाइमस्ट्रीम () 2 एमबी मुक्त ढेर के साथ 400KB फ़ाइल के साथ मेमोरी से बाहर

एंड्रॉइड में java.lang.OutOfMemoryError की समस्या को कैसे हल करें

Android: java.lang.OutOfMemoryError

java.lang.OutOfMemoryError

OutOfMemoryError के लिए समाधान: बिटमैप का आकार VM बजट से अधिक है

संपादित करें: @cjnash की टिप्पणियों से

किसी के लिए भी जो इस लाइन को जोड़ने के बाद भी क्रैश हो गया था, अपनी छवि को अपने Res / drawable-xhdpi / फ़ोल्डर में अपने res / drawable / के बजाय चिपकाकर देखें और इससे आपकी समस्या हल हो सकती है।


1
क्या आप कृपया पोस्ट कर सकते हैं कि आपने अंततः इस मुद्दे को कैसे हल किया? क्योंकि मेरे पास एक ही समस्या है ... वास्तव में आप अपनी अभिव्यक्तियों में इस पंक्तियों को जोड़ सकते हैं Android: हार्डवेयरएक्लेरेटेड = "झूठा", Android: bigHeap = "सही" यह कुछ स्थितियों के लिए काम कर रहा है, लेकिन यह जान लें कि कोड का दूसरा भाग हो सकता है इसके साथ बहस कर ...
अलेक्सी टिमोशेंको

6
इसे जोड़ने के बाद ऐप नेविगेशन बहुत धीमा होता जा रहा है।
उमा अचंता

10
Android: hardwareAccelerated = "false" आपके ऐप को
फ्रीज़ करता है

1
किसी के लिए भी जो इस लाइन को जोड़ने के बाद भी क्रैश हो गया था, अपनी छवि को अपने Res / drawable-xhdpi / फ़ोल्डर में अपने Res / drawable / के बजाय चिपकाकर देखें और इससे आपकी समस्या का समाधान हो सकता है।
cjnash

6
आप Android क्यों सुझाएंगे: hardwareAccelerated = "false? इसका क्या फायदा है?
batmaci

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
मैंने इस एंड्रॉइड के साथ कोशिश की है: bigHeap = "सच" लेकिन एक ही त्रुटि हो रही है
androidTag

1
इससे पहले कि आप इस लिंक का उपयोग करने के लिए अपनी छवि को संकुचित करने का प्रयास करें जैसे कि smalljpg.com
TSG

1
आप इस साइट के साथ पीएनजी को संक्षिप्त कर सकते हैं
टीएसजी

27

मेरे लिए, समस्या यह थी कि मेरी .png फाइल को मेमोरी में वास्तव में बहुत बड़ा बिटमैप होने के लिए डी-कंप्रेस किया जा रहा था, क्योंकि छवि में बहुत बड़े आयाम थे (भले ही फ़ाइल का आकार छोटा था)।

तो तय था कि बस छवि का आकार बदल जाएगा :)


3
यह सही समाधान है, क्योंकि मैंने पहले समाधानों के ऊपर प्रयास किया था, लेकिन आवेदन करने के बाद android:hardwareAccelerated="false", लेआउट छाया जैसे कुछ एनिमेशन काम नहीं कर रहे थे। लेकिन सभी समस्याओं को हल करने के बाद आपको धन्यवाद दिया गया! इस संकेत के लिए +1!
कौशल्या

1
इससे मेरी समस्या ठीक हो गई। धन्यवाद @petrus
गुयेन

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
काम नहीं किया, यह उसी त्रुटि के साथ दुर्घटनाग्रस्त हो गया, जब Bitmap.createBitmap का उपयोग किया गया था
नरेंद्र सिंह

@ खेद (मैं भी इस मुद्दे को हल करने के लिए कुछ समय बिताया, और यह मेरे लिए काम है। लेकिन यह सिर्फ एक ही तरीका है ... वहाँ बहुत अलग दृष्टिकोण हैं
अलेक्सी टिमोशचेंको

2
Android का उद्देश्य क्या है : hardwareAccelerated = "false" ?
इगोरगानापोलस्की

@IgorGanapolsky आधिकारिक डॉक से कहता है .. इस लिंक को देखें
शिलेंद्र मद्दा

27

यह काम करना चाहिए

 BitmapFactory.Options options = new BitmapFactory.Options();
 options.inSampleSize = 8;

 mBitmapSampled = BitmapFactory.decodeFile(mCurrentPhotoPath,options);

11

इस तरह ImageView के लिए सेटअप से पहले अपनी छवि का आकार बदलें :

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

जहां आकार ImageView का वास्तविक आकार है। आप माप कर आकार तक पहुँच सकते हैं:

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

और अगले आकार imageView.getMeasuredWidth()और के imageView.getMeasuredHeight()लिए उपयोग करें scaling


मैंने इस एंड्रॉइड के साथ कोशिश की है: bigHeap = "सच" लेकिन एक ही त्रुटि हो रही है
androidTag

यह आवश्यक रूप से क्यों काम नहीं करेगा (निजी ऐप स्टोरेज का उपयोग करके) इसका एक और उदाहरण: Res / drawable / में एक बिटमैप प्लेस करना एक ही त्रुटि दे सकता है लेकिन यह हर बार नहीं होगा। उसी बिटमैप को Res / drawable-xhdpi में रखने से / अब त्रुटि नहीं होगी। तो एक उत्तर के रूप में, यह अपने आप सही नहीं है।
CmosBattery 13

8

ग्लाइड लाइब्रेरी और ओवरराइड आकार का कम आकार में उपयोग करें ;

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

6

मैं त्रुटि के नीचे गया

"ई / कला: थ्रू आउटऑफ़मेरीरोर" 16777120 मुफ्त बाइट्स और 23 एमबी ओओएम के साथ 47251468 बाइट आवंटन करने में विफल "

AndroidManifest.xmlandroid:largeHeap="true" में जोड़ने के बाद फिर मैंने सभी त्रुटियों से छुटकारा पाया

<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 फॉर्म का उपयोग कर रहा हूं। PNG छवि का आकार घटने से समस्या हल हो गई।


4

समस्या: 16777120 मुफ्त बाइट और 17MB के साथ OOM तक 37748748 बाइट आवंटन करने में विफल

समाधान: 1. अपनी प्रकट फ़ाइल को खोलें 2. एप्लिकेशन टैग के अंदर बस दो पंक्तियों के नीचे जोड़ें

 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। मुझे यह अपने दम पर पता लगाना था और आज तक इस ढेर स्मृति जाल के लिए प्रलेखन नहीं देखा है। इसे रोकने के लिए मैंने सब कुछ एक ड्रॉबल-नॉडपी फ़ोल्डर में रखा (विशेष उपकरण हीप के आधार पर बिटमैपफैक्टरी में 'विकल्प' का उपयोग करने के अलावा)। मैं अपने ऐप का आकार कई ड्रॉ करने योग्य फ़ोल्डरों के साथ फूला हुआ नहीं रख सकता, विशेष रूप से स्क्रीन डिफ की रेंज अब बहुत विशाल है। मुश्किल बात यह है कि स्टूडियो अब विशेष रूप से 'drawable-nodpi' फ़ोल्डर को इंगित नहीं करता है जैसे कि प्रोजेक्ट दृश्य में, यह सिर्फ 'drawable' फ़ोल्डर दिखाता है। यदि आप सावधान नहीं हैं, जब आप स्टूडियो में इस फ़ोल्डर के लिए एक छवि छोड़ते हैं, तो यह जीता '

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

यह मेरे लिए काम कर रहा है: बस ड्रॉबल फोल्डर से इमेज को ड्रॉएबल-एचडीपीआई में ले जाएं।


इसका क्या स्पष्टीकरण है? यह काम क्यों चल रहा है?
हारुन

pls समझाएं कि यह क्यों काम करता है ...?
एक्स-ब्लैक ...

3

Soluton अपने मैनिफ़ेस्ट फ़ाइल में यह प्रयास करें और ग्लाइड लाइब्रेरी का उपयोग करें

संकलन 'com.github.bumptech.glide: 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 = "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">

इस पुस्तकालय का उपयोग करें

  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 = "true"


इसका एक और उपाय भी है: ऊँचाई बदलें = ऊँचाई * .75 और चौड़ाई = चौड़ाई * .75।
SAURABH OMER

2

मुझे भी समस्या थी।

ऊपर के अन्य लोगों के साथ भी। समस्या बड़ी छवि के कारण होती है।

बस कुछ छवियों का आकार बदलें, और किसी भी कोड को बदलने की आवश्यकता नहीं है।


2

कुछ मामलों में (जैसे लूप में संचालन) कचरा संग्रहकर्ता आपके कोड से धीमा है। आप एक का उपयोग कर सकते इस जवाब से सहायक विधि करने के लिए कचरा कलेक्टर के लिए इंतजार


1

मैं एंड्रॉइड के विकास में एक नौसिखिया हूं लेकिन मुझे आशा है कि मेरा समाधान मदद करता है, यह मेरी स्थिति पर पूरी तरह से काम करता है। इमेजव का उपयोग करके Im इसे "src" की पृष्ठभूमि पर सेट करें क्योंकि im एक फ्रेम एनीमेशन बनाने की कोशिश कर रहा है। मुझे वही त्रुटि मिली लेकिन जब मैंने इसे कोड करने की कोशिश की तो यह काम कर गया

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

आपको ड्रा करने योग्य में ऑब्जेक्ट का आकार बदलना होगा। यह प्रदर्शित करने के लिए Android के लिए बहुत बड़ा है। उदाहरण यदि आप कम पिक्सेल के साथ छवि आज़माते हुए छवि सेट कर रहे हैं। इससे मेरा काम बनता है। धन्यवाद। :)


1

आपका एप्लिकेशन क्रैश हो रहा है क्योंकि आपकी छवि का आकार (MB या KB में) बहुत बड़ा है इसलिए यह उसके लिए स्थान आवंटित नहीं कर रहा है। तो अपनी छवि को ड्रॉबल में चिपकाने से पहले सिर्फ आकार कम करें।

या

आप Manifest.xml पर एप्लिकेशन टैग में निम्नलिखित जोड़ सकते हैं

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

इस ऐप को जोड़ने के बाद क्रैश नहीं होगा।

  • हमेशा App में कम आकार के चित्रों का उपयोग करें।
  • यदि आप ऐप में बड़े आकार के चित्र जोड़ रहे हैं, तो आपको सिंटेक्स से ऊपर जोड़ना चाहिए, लेकिन ऐप का आकार बढ़ जाएगा।

1

जोड़ने के बाद मेरी समस्या हल हो गई

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

Build.Gradle फ़ाइल में


यह सिर्फ आपके ऐप को मेमोरी उपयोग में वास्तव में फूला हुआ बनाता है
OneCricketeer

@ क्रिकेट_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();

फिर Appliaction टैग में, bigheapsize = "true जोड़ें


0

मुझे लगता है कि आप इस छवि को एक आइकन के रूप में उपयोग करना चाहते हैं। जैसा कि एंड्रॉइड आपको बता रहा है, आपकी छवि बहुत बड़ी है। आपको बस अपनी छवि को स्केल करने की आवश्यकता है ताकि एंड्रॉइड को पता चले कि किस आकार का उपयोग करना है और स्क्रीन रिज़ॉल्यूशन के अनुसार कब। इसे पूरा करने के लिए, एंड्रॉइड स्टूडियो में: 1. रेस फ़ोल्डर पर राइट क्लिक करें, 2. इमेज एसेट का चयन करें। आइकन का चयन करें 4. आइकन को एक नाम दें 5. एसेट टाइप पर छवि का चयन करें 6. अपनी छवि ट्रिम करें अगला और समाप्त करें पर क्लिक करें। । अपने xml या स्रोत कोड में केवल उस छवि को देखें, जो अब चयनित संपत्ति के प्रकार के अनुसार लेआउट या mipmap फ़ोल्डर में स्थित होगी। त्रुटि दूर हो जाएगी।


0

मैं वास्तव में इस तरह के संपादन की सलाह नहीं देता

एंड्रॉइड: हार्डवेयरएक्लेरेटेड = "गलत", एंड्रॉइड: लार्जहैप = "सच"

ये विकल्प आपके ऐप पर सहज एनीमेशन प्रभाव का कारण नहीं बनते हैं। इसके अलावा 'liveData' या अपने स्थानीय DB (Sqlite, Room) को धीरे-धीरे सक्रिय करें। यह उपयोगकर्ता के अनुभव के लिए बुरा है।

इसलिए मैं RESIZE बिटमैप की सलाह देता हूं

नीचे नमूना कोड है

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

अगर android: bigHeap = "true" तब आपके लिए काम नहीं करता था

1:

छवि संपीड़न। मैं इस वेबसाइट का उपयोग कर रहा हूं

2:

Mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi में चित्र बदलें। मैं इस वेबिस्ट का उपयोग कर रहा हूं

Android न निकालें:


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.