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

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

يمكنك تأجيل تحميل الموارد عندما يكون لديك طرق عرض معقدة احتياجاتك في المستقبل من خلال تحديد 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 التخطيط مرئي أو متضخم.

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