दिलचस्प पोस्ट
स्विफ्ट का उपयोग करके किसी श्रेणी में एक यादृच्छिक संख्या कैसे उत्पन्न करें (10 … 20) एंड्रॉइड में जीएसओएन का उपयोग करने के लिए जेसन पार्स को कैसे विश्लेषित किया जाए नियंत्रक के अंदर से नियंत्रक और क्रिया नाम प्राप्त करें? स्विफ्ट का उपयोग करके कहीं भी स्पर्श करके आईओएस कीबोर्ड बंद करें कैसे बताओ कि क्या वर्तमान व्यूपोर्ट में एक DOM तत्व दृश्यमान है? "अनअसाइन किए गए स्थानीय चर का उपयोग" क्या मतलब है? प्रतिबिंब के द्वारा सी # में डिफ़ॉल्ट कन्स्ट्रक्टर के बिना प्रकार का उदाहरण बनाना मैं किसी iPhone एप्लिकेशन से मेल कैसे भेज सकता हूं ट्रांसजेन स्पेस बढ़ाएं कैसे अल्पविराम से अलग स्ट्रिंग को ArrayList में परिवर्तित करें? बूटस्ट्रैप 3 के साथ लंबवत-संरेखित करें कस्टम QuerySet और प्रबंधक DRY को तोड़ने के बिना? 1-आयामी सरणी के लिए सरणी सब्सक्रिप्शन्स को सामान्य करें ताकि वे 1 से शुरू करें 400 बैड अनुरोध HTTP त्रुटि कोड अर्थ है? क्यों इस कोड में कोई भी रिटर्न शामिल नहीं है?

उच्च रिज़ॉल्यूशन इमेज – आउटऑफममेरीएरर

मैं गैलेक्सी एस 4 के लिए एक आवेदन विकसित कर रहा हूं। एप्लिकेशन की आवश्यकताओं में से एक में एक स्पलैशस्क्रीन है जिसमें 1920×1080 पिक्सल की एक छवि है। इसकी एक उच्च गुणवत्ता। जेपीईजी छवि और छवि का आकार लगभग 2 मेगाबाइट है

समस्या यह है कि जैसे ही मैं अनुप्रयोग शुरू करते हैं, जैसे ही मुझे आउटऑफममेरी एरर मिल रहा है मुझे काफी डर है कि यह पहले से ही आकार में सिर्फ 2 मेगाबाइट की छवि के साथ होता है? मैं इस समस्या को ठीक कैसे कर सकता हूं और छवि को प्रदर्शित कर सकता हूं?

आयाम बदलने या छवि का आकार एक विकल्प नहीं है।

SplashScreen.java

public class Splashscreen extends Activity { private static final int SPLASH_DURATION = 2000; private boolean isBackPressed = false; @Override protected void onCreate(Bundle savedInstanceState) { requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(LayoutParams.FLAG_FULLSCREEN, LayoutParams.FLAG_FULLSCREEN); super.onCreate(savedInstanceState); setContentView(R.layout.splashscreen); Handler h = new Handler(); h.postDelayed(new Runnable() { @Override public void run() { // check if the backbutton has been pressed within the splash_duration if(!isBackPressed) { Intent i = new Intent(Splashscreen.this, MainActivity.class); i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); Splashscreen.this.startActivity(i); overridePendingTransition(R.anim.short_fade_in, R.anim.short_fade_out); } finish(); } }, SPLASH_DURATION); } @Override public void onBackPressed() { isBackPressed = true; super.onBackPressed(); } } 

और splashscreen.xml

  <ImageView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/ivSplashScreenImage" android:layout_width="match_parent" android:layout_height="match_parent" android:scaleType="fitXY" android:src="@drawable/high_res_splashscreen_image"/> 

अतिरिक्त जानकारी:

कभी-कभी, (जब बहुत मेमोरी मेमोरी उपलब्ध है) ऐप इसे स्प्लैश स्क्रीन से पहले ही बनाने में सक्षम है, लेकिन फिर, ऐप की स्मृति खपत सिर्फ पागल है (करीब 100 मेगाबाइट) । हालांकि मैं स्पलैशस्क्रीन गतिविधि को खत्म करता हूं और इसे खत्म करता हूं (), ऐसा लगता है कि छवि दृश्य / छवि को स्मृति में रखा गया है।

मैं विशाल स्मृति खपत को कैसे कम कर सकता हूं?

जब मैं स्प्लैश स्क्रीन प्रदर्शित नहीं करता हूं, तो मेरा ऐप केवल 35 एमबी मेमोरी की खपत करता है स्पलैशस्क्रीन छवि के साथ, इसका लगभग 100 एमबी

वेब के समाधान से एकत्रित समाधान "उच्च रिज़ॉल्यूशन इमेज – आउटऑफममेरीएरर"

तीन संकेत जो आपकी मदद कर सकते हैं:

  1. लोडिंग लार्ज बिटमैप एंड्रॉइड प्रलेखन से, अपनी छवियों को लोड करने के लिए इसका प्रयोग करें:

     public static Bitmap decodeSampledBitmapFromResource(Resources res, int resId, int reqWidth, int reqHeight) { // First decode with inJustDecodeBounds=true to check dimensions final BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; BitmapFactory.decodeResource(res, resId, options); // Calculate inSampleSize options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight); // Decode bitmap with inSampleSize set options.inJustDecodeBounds = false; return BitmapFactory.decodeResource(res, resId, options); } public static int calculateInSampleSize( BitmapFactory.Options options, int reqWidth, int reqHeight) { // Raw height and width of image final int height = options.outHeight; final int width = options.outWidth; int inSampleSize = 1; if (height > reqHeight || width > reqWidth) { // Calculate ratios of height and width to requested height and width final int heightRatio = Math.round((float) height / (float) reqHeight); final int widthRatio = Math.round((float) width / (float) reqWidth); // Choose the smallest ratio as inSampleSize value, this will guarantee // a final image with both dimensions larger than or equal to the // requested height and width. inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio; } return inSampleSize; } 
  2. सुनिश्चित करें कि आपके स्मृति में आपके Bitmap का केवल एक उदाहरण है इसे प्रदर्शित करने के बाद, recycle() कॉल करें और अपने संदर्भ को null करने के लिए सेट करें। आप आवंटित किए गए हैं, यह देखने के लिए आप मेमोरी आवंटन ट्रैकर का उपयोग कर सकते हैं। टिप्पणियों में सुझाव के अनुसार, आप एचपीआरओएफ फाइलों को भी पढ़ सकते हैं।

  3. डिफ़ॉल्ट रूप से ARGB_8888 पिक्सेल प्रारूप का उपयोग किया जाता है, जिसका मतलब है कि 4 बाइट्स प्रति पिक्सेल बहुत अच्छा लेख: बिटमैप गुणवत्ता, बैंडिंग और डरथिंग आपकी छवि जेपीईजी है, इसलिए इसमें पारदर्शिता नहीं है, इसलिए आप अल्फा चैनल के लिए हर पिक्सेल पर 1 बाइट बर्बाद कर रहे हैं। यह बहुत संभव नहीं है, लेकिन शायद स्वीकार्य गुणवत्ता के साथ आप अधिक किफायती प्रारूप का उपयोग कर सकते हैं। उन पर एक नज़र डालें शायद RGB_565 उदाहरण के लिए। पिक्सेल के लिए 2 बाइट्स लेता है, इसलिए आपकी छवि 50% लाइटर होगी आप RGB_565 की गुणवत्ता में सुधार के लिए RGB_565 सक्षम कर सकते हैं।

मेरे पास एक समान समस्या थी और समाधान सरल है I ड्रॉएबल-नोडपी डायरेक्टरी में अपना उच्च संकल्प 1920×1080 पिक्स छवि डालेंसिस्टम इस क्वालीफायर के साथ टैग किए गए संसाधनों को स्केल नहीं करता है, चाहे वर्तमान स्क्रीन के घनत्व की परवाह किए बिना, आउटऑफममेरी एरर हो जाता है, इसलिए समस्या गायब होनी चाहिए।

कृपया एंड्रॉइड दस्तावेज़ीकरण जांचें: http://developer.android.com/intl/es/guide/practices/screens_support.html

आशा करता हूँ की ये काम करेगा।