مرحبا يا هبر! في هذه المقالة ، التي تستهدف المبتدئين ، أود أن أقدم بعض النصائح حول تحسين استخدام ذاكرة الجهاز من خلال التطبيق ، حتى لا تحصل على OutOfMemory باستمرار ، وكذلك النظر في استخدام الصور المتجهة في الإصدار الحالي الحالي من Android Studio (3.4) ، حيث أن معظم موارد اللغة الروسية في هذا الموضوع (آخر
مقالة عن حبري حول صور المتجهات يعود إلى عام 2015) قديم ، وغالبًا ما يضلل المطورين المبتدئين. لذلك دعونا نبدأ.
1. استخدام الصور المتجهة بدلا من الصور النقطية
بالطبع ، لا ينبغي تحويل الصور الكبيرة التي تحتوي على الكثير من التفاصيل الصغيرة إلى متجه - حيث سيشغل ذلك مساحة كبيرة مثل مساحة البيانات النقطية ، إن لم يكن أكثر. ومع ذلك ، يجب تحويل الصور الصغيرة ، مثل الرموز والتفاصيل الأخرى لواجهة المستخدم إلى متجه من أجل حفظ الذاكرة. وغالبًا ما
يكون العمل مع
الصور المتجهة أكثر ملاءمة. والآن ، الشيء الأكثر أهمية - كيف نفعل ذلك؟
- افتح Android Studio.
- انقر بزر الماوس الأيمن على المجلد القابل للدخول أو محتوياته> جديد> Vector Asset

- حدد المسار إلى ملف svg الخاص بك. إذا كان لصورتك شكل غير منتظم ، فأنصحك بتحديد المربع الموجود بجوار المعلمة Override - وإلا سيتم ضبط الصورة على أحجام قياسية ، مما قد يؤدي إلى تشويه نسبها.

- التالي> إنهاء
- القيام به!
للتحويل من خطوط المسح إلى المتجهات ، يمكنني أن أوصي بتطبيق
Inkscape مجاني وممتاز. قليلا عن العمل معه:
- افتح إنكسكيب.
- اسحب أي خطوط المسح إلى ذلك. في النافذة التي تفتح ، حدد خيارات الاستيراد وانقر فوق موافق.
- في شريط الأدوات العلوي ، بعد تحديد صورتنا ، حدد Path> Vectorize raster (Shift + Alt + B).
- الآن الشيء الأكثر أهمية. في النافذة الجديدة ، حدد المربع بجوار "إزالة الخلفية" وحدد ما يلي: ما إذا كانت صورتنا ستكون ملونة ، وعدد عمليات الفحص التي يجب إجراؤها. يجب ألا ننسى أن حجم ملف المتجه لدينا يعتمد بشكل مباشر على هاتين المعلمتين.
المزيد من عمليات المسح - المزيد من الألوان والظلال والتفاصيل. من أجل الحصول على مظهر إلهي ، من أجل الحصول على مظهر إلهي ، نظرًا لوجود عدد أكبر من الألوان في الصورة ، تطلب الأمر إجراء 30 عملية مسح. هذا كثير جدًا ، من الأفضل عدم القيام بأكثر من عشرة واختيار الصور بشكل أسهل.

- أغلق النافذة ، وانقر فوق البيانات النقطية وحذفها باستخدام مفتاح "الحذف" ، وانتقل إلى "ملف"> "خصائص المستند" (Shift + Ctrl + D) ، واضبط حجم الصفحة للمحتوى.
الآن سنقوم بإجراء اختبار صغير يثبت ميزة المتجه في حفظ الذاكرة.
لقد أنشأت مشروعًا جديدًا باستخدام ImageView واحد ، حيث قمت بتطبيق رسم متحرك يقوم بنقله من النقطة A إلى النقطة B ، مع تغيير الصور بالتناوب إلى الخطوط النقطية والتناوب. نحن ننظر إلى البيانات.
النقطية

سهم التوجيه

الفرق هو تقريبا مرتين. أعتقد أن هذا مقنع للغاية.
2. زيادة حجم الكومة
للقيام بذلك ، انتقل إلى بيان مشروعك (التطبيق> البيانات> AndroidManifest.xml) وأضف السطر في عمود التطبيق:
android:largeHeap="true"
في الحقيقة ، زيادة الكومة ليست حلاً لمشكلة OutOfMemory ، بل دفعها إلى الرف البعيد. بدلاً من تحسين استخدام التطبيق لذاكرة الجهاز ، نمنحه مساحة أكبر. لا تنس أن كل جهاز لديه سعة الذاكرة الخاصة به ، الأساسية والثانوية ، المخصصة للتطبيق.
3. تجنب تسرب الذاكرة
يستخدم أي تطبيق في عمله العديد من الكائنات ، والتي تشغل ، بالطبع ، مكانًا معينًا في الذاكرة. من الناحية المثالية ، يجب على جامع البيانات المهملة إزالة الكائنات غير المستخدمة منه ، ولكن في بعض الأحيان هناك ما يسمى "تسرب الذاكرة" التي تسبب مشاكل خطيرة في التطبيق. هناك العديد من أسباب تسرب الذاكرة ، الموضحة بالتفصيل
هنا .
بمفردي ، أود تقديم المشورة لمكتبة
WeakHandler ، التي طورتها Badoo ، ومصممة للقضاء على تسرب الذاكرة المرتبط بإساءة استخدام android.os.Handler. لاستخدام هذه المكتبة ، أضف السطر التالي إلى عمود التبعيات في ملف gradle الخاص بك (Gradle Scripts> build.gradle (Module: app)):
compile 'com.badoo.mobile:android-weak-handler:1.1'
وفي ملف جافا:
private WeakHandler mHandler; protected void onCreate(Bundle savedInstanceState) { mHandler = new WeakHandler(); ... } private void onClick(View view) { mHandler.postDelayed(new Runnable() { view.setVisibility(View.INVISIBLE); }, 5000); }
ولا تنس استيراد WeakHandler نفسه إذا كان الاستوديو لا يقوم بذلك تلقائيًا.
4. تجنب الرسوم المتحركة الفاصل الزمني
الرسوم المتحركة بالإطار تلو الآخر في Android Studio شيء ملائم ، ولكنها ليست الأكثر اقتصادا. إذا كنت تستخدم عددًا كبيرًا من الصور فيه ، فستحصل بالتأكيد على OutOfMemory.
ولكن ، إذا كنت بحاجة إليها حقًا ، فمن الأفضل استخدام صورة gif مع مكتبة
Android Gif Drawable . تعمل هذه المكتبة على تبسيط العمل باستخدام gifs وتستهلك أيضًا ذاكرة أقل بكثير من الرسوم المتحركة للإطار في Android Studio. لاستخدام هذه المكتبة ، أضف السطر التالي إلى عمود التبعيات في ملف gradle الخاص بك (Gradle Scripts> build.gradle (Module: app)):
implementation 'pl.droidsonroids.gif:android-gif-drawable:1.2.16'
وفي ملف gradle Script الخاص بك (Gradle Scripts> build.gradle (الوحدة: "اسم التطبيق الخاص بك")) في مخطط البناء وأعمدة allproject السطر:
mavenCentral()
وفي ملف جافا:
GifDrawable gifFromResource = new GifDrawable( getResources(), R.drawable._ ); gifFromResource.start();
لتعطيل gif ، بدلاً من start () ، اكتب stop (). أيضًا لا تنس ضغط ملفات GIF ، فهذا سيوفر مساحة أكبر.
آمل أن مقالتي كانت مفيدة لك. شكرا لك