تحميل المشاهدات عند الطلب

يتطلب التخطيط أحيانًا طرق عرض معقدة نادرًا ما يتم استخدامها. وسواء كانت تفاصيل العناصر أو مؤشرات التقدم أو رسائل تراجع عن الرسائل، يمكنك تقليل استخدام الذاكرة وتسريع العرض عن طريق تحميل المشاهدات عند الحاجة إليها فقط.

يمكنك تأجيل تحميل الموارد عندما يكون لديك طرق عرض معقدة يحتاجها التطبيق في المستقبل من خلال تحديد ViewStub لطرق العرض المعقدة والتي لا يتم استخدامها إلا نادرًا.

تحديد ViewStub

ViewStub عبارة عن طريقة عرض خفيفة بدون أي بُعد لا ترسم أي شيء أو تشارك في التنسيق. وبالتالي، يتطلب الأمر القليل من الموارد للتضخيم والترك في التسلسل الهرمي لطريقة العرض. يتضمّن كل ViewStub السمة android:layout لتحديد التنسيق المطلوب تضخيمه.

لنفترض أن لديك تنسيقًا تريد تحميله لاحقًا في رحلة المستخدم لتطبيقك:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:src="@drawable/logo"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
</FrameLayout>

يمكنك تأجيل التحميل باستخدام ViewStub التالية. لإظهار أو تحميل أي شيء، يجب أن تجعله يُظهر التخطيط المشار إليه:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/root"
android:layout_width="match_parent"
android:layout_height="match_parent">

<ViewStub
    android:id="@+id/stub_import"
    android:inflatedId="@+id/panel_import"
    android:layout="@layout/heavy_layout_we_want_to_postpone"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom" />
</FrameLayout>

تحميل تنسيق ViewStub

تنتج مقتطفات الرمز في القسم السابق شيئًا مثل الشكل 1:

صورة لشاشة فارغة
الشكل 1. الحالة الأولية للشاشة: يخفي ViewStub التنسيق الكثيف.

عندما تريد تحميل التنسيق الذي تحدّده ميزة ViewStub، يمكنك ضبطه ليكون مرئيًا من خلال استدعاء setVisibility(View.VISIBLE) أو الاتصال بـ inflate().

يحاكي مقتطف الرمز التالي تحميلاً مؤجَّلًا. يتم تحميل الشاشة كالمعتاد في Activity وonCreate()، ثم تعرض تنسيق heavy_layout_we_want_to_postpone:

Kotlin

override fun onCreate(savedInstanceState: Bundle?) {
  super.onCreate(savedInstanceState)
  setContentView(R.layout.activity_old_xml)

  Handler(Looper.getMainLooper())
      .postDelayed({
          findViewById<View>(R.id.stub_import).visibility = View.VISIBLE
          
          // Or val importPanel: View = findViewById<ViewStub>(R.id.stub_import).inflate()
      }, 2000)
}

Java

@Override
void onCreate(savedInstanceState: Bundle?) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_old_xml);

  Handler(Looper.getMainLooper())
      .postDelayed({
          findViewById<View>(R.id.stub_import).visibility = View.VISIBLE
          
          // Or val importPanel: View = findViewById<ViewStub>(R.id.stub_import).inflate()
      }, 2000);
}
الشكل 2. التنسيق الكثيف مرئي.

بعد ظهور العنصر ViewStub أو تضخيمه، لن يبقى جزءًا من التسلسل الهرمي لطريقة العرض. يتم استبداله بالتنسيق المضخَّم، ويتم تحديد معرّف العرض الجذر لهذا التنسيق من خلال السمة android:inflatedId في ViewStub. رقم التعريف android:id المحدّد لـ ViewStub صالح فقط إلى أن يصبح تنسيق ViewStub مرئيًا أو كبيرًا.

لمزيد من المعلومات حول هذا الموضوع، يُرجى الاطّلاع على مشاركة المدوّنة التحسين باستخدام روابط التنويهات الموجزة.