بدء تشغيل التطبيق جزء من Android Jetpack.
توفّر مكتبة App Startup طريقة مباشرة وفعّالة لإعداد المكوّنات عند بدء تشغيل التطبيق. يمكن لكل من مطوري المكتبات ومطوري التطبيقات استخدام App Startup لتبسيط تسلسلات الشركات الناشئة وتحديد ترتيب التهيئة بشكل صريح.
بدلاً من تحديد موفري محتوى منفصلين لكل مكون تحتاج إلى تهيئته، يسمح لك بدء تشغيل التطبيق بتحديد أدوات تهيئة المكونات التي تشترك في موفر محتوى واحد. يمكن أن يؤدي ذلك إلى تحسين وقت بدء تشغيل التطبيق بشكل ملحوظ.
ضبط إعدادات
لاستخدام Jetpack Startup في مكتبتك أو تطبيقك، أضِف ما يلي إلى ملف Gradle:
رائع
dependencies { implementation "androidx.startup:startup-runtime:1.1.1" }
Kotlin
dependencies { implementation("androidx.startup:startup-runtime:1.1.1") }
إعداد المكونات عند بدء تشغيل التطبيق
تعتمد التطبيقات والمكتبات غالبًا على تهيئة المكونات فورًا عند بدء تشغيل التطبيق. يمكنك تلبية هذه الحاجة باستخدام موفّري المحتوى من أجل إعداد كل تبعية، ولكن تكلفة إنشاء مثيل لموفري المحتوى قد تؤدي إلى إبطاء تسلسل بدء التشغيل بدون داعٍ. بالإضافة إلى ذلك، يقوم Android بإعداد موفري المحتوى بترتيب غير محدد. يوفّر App Startup طريقة أكثر أداءً لإعداد المكونات عند بدء تشغيل التطبيق وتحديد تبعياتها بشكل صريح.
لاستخدام App Startup لتهيئة المكونات تلقائيًا عند بدء التشغيل، يجب عليك تحديد مكون محدد لكل مكون يحتاج التطبيق للتهيئة.
تنفيذ أدوات إعداد المكوّنات
يمكنك تحديد كل مُعدّ للمكوِّن من خلال إنشاء فئة تنفّذ واجهة Initializer<T>
.
تحدد هذه الواجهة طريقتين مهمتين:
- الطريقة
create()
، التي تحتوي على جميع العمليات اللازمة لإعداد المكوِّن وعرض مثيلT
. - الطريقة
dependencies()
التي تعرض قائمة بكائناتInitializer<T>
الأخرى التي يعتمد عليها المنظِّم. يمكنك استخدام هذه الطريقة للتحكم في الترتيب الذي يشغّل به التطبيق أدوات التهيئة عند بدء التشغيل.
على سبيل المثال، لنفترض أن تطبيقك يعتمد على
WorkManager
ويحتاج إلى
تهيئته عند بدء التشغيل. حدد فئة WorkManagerInitializer
تنفّذ Initializer<WorkManager>
:
Kotlin
// Initializes WorkManager. class WorkManagerInitializer : Initializer<WorkManager> { override fun create(context: Context): WorkManager { val configuration = Configuration.Builder().build() WorkManager.initialize(context, configuration) return WorkManager.getInstance(context) } override fun dependencies(): List<Class<out Initializer<*>>> { // No dependencies on other libraries. return emptyList() } }
Java
// Initializes WorkManager. class WorkManagerInitializer implements Initializer<WorkManager> { @Override public WorkManager create(Context context) { Configuration configuration = Configuration.Builder().build(); WorkManager.initialize(context, configuration); return WorkManager.getInstance(context); } @Override public List<Class<Initializer<?>>> dependencies() { // No dependencies on other libraries. return emptyList(); } }
تعرِض الطريقة dependencies()
قائمة فارغة لأنّ WorkManager
لا تعتمد على أيّ مكتبات أخرى.
لنفترض أنّ تطبيقك يعتمد أيضًا على مكتبة تُسمى ExampleLogger
، والتي
تعتمد بدورها على WorkManager
. تعني هذه التبعية أنك بحاجة إلى التأكد من أن بدء تشغيل التطبيق
يهيئ WorkManager
أولاً. تحديد فئة ExampleLoggerInitializer
تنفّذ Initializer<ExampleLogger>
:
Kotlin
// Initializes ExampleLogger. class ExampleLoggerInitializer : Initializer<ExampleLogger> { override fun create(context: Context): ExampleLogger { // WorkManager.getInstance() is non-null only after // WorkManager is initialized. return ExampleLogger(WorkManager.getInstance(context)) } override fun dependencies(): List<Class<out Initializer<*>>> { // Defines a dependency on WorkManagerInitializer so it can be // initialized after WorkManager is initialized. return listOf(WorkManagerInitializer::class.java) } }
Java
// Initializes ExampleLogger. class ExampleLoggerInitializer implements Initializer<ExampleLogger> { @Override public ExampleLogger create(Context context) { // WorkManager.getInstance() is non-null only after // WorkManager is initialized. return ExampleLogger(WorkManager.getInstance(context)); } @Override public List<Class<Initializer<?>>> dependencies() { // Defines a dependency on WorkManagerInitializer so it can be // initialized after WorkManager is initialized. return Arrays.asList(WorkManagerInitializer.class); } }
بسبب تضمين WorkManagerInitializer
في طريقة dependencies()
، يهيئ App
Startup WorkManager
قبل ExampleLogger
.
إعداد إدخالات البيان
يشتمل App Startup على موفّر محتوى خاص يُسمى InitializationProvider
يستخدمه لاكتشاف أدوات تهيئة المكوّنات والاتصال بها. تكتشف ميزة App Startup أدوات تهيئة المكوّنات من خلال التحقق أولاً من إدخال <meta-data>
ضمن إدخال البيان InitializationProvider
. بعد ذلك، تستدعي App Startup طرق
dependencies()
لأي أدوات تم اكتشافها من قبل.
وهذا يعني أنّه يجب استيفاء أحد الشروط التالية لتكون أداة إعداد المكوّنات قابلة للاكتشاف من خلال ميزة App Startup:
- يحتوي مشغِّل المكوِّن على إدخال
<meta-data>
مقابل ضمن إدخال البيانInitializationProvider
. - يتم إدراج منظِّم المكوِّن في طريقة
dependencies()
من معدِّل يمكن اكتشافه.
ننصحك مرّة أخرى باستخدام المثال الذي يتضمّن WorkManagerInitializer
وExampleLoggerInitializer
. للتأكد من أن بدء تشغيل التطبيق يمكنه اكتشاف هذه
المهيئات، أضف ما يلي إلى ملف البيان:
<provider
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
android:exported="false"
tools:node="merge">
<!-- This entry makes ExampleLoggerInitializer discoverable. -->
<meta-data android:name="com.example.ExampleLoggerInitializer"
android:value="androidx.startup" />
</provider>
لست بحاجة إلى إضافة إدخال <meta-data>
لـ WorkManagerInitializer
،
لأن WorkManagerInitializer
تعتمد على ExampleLoggerInitializer
.
هذا يعني أنّه إذا كان من الممكن العثور على علامة ExampleLoggerInitializer
، سيكون WorkManagerInitializer
كذلك.
تضمن السمة tools:node="merge"
أن أداة دمج البيان تحل أي إدخالات متضاربة كما ينبغي.
تشغيل عمليات التحقّق من الوبر
تتضمن مكتبة App Startup مجموعة من قواعد الوبر التي يمكنك استخدامها للتحقق مما إذا كنت قد حددت أدوات تهيئة المكوِّنات بشكل صحيح. يمكنك إجراء عمليات التحقّق من الوبر هذه عن طريق تشغيل ./gradlew :app:lintDebug
من سطر الأوامر.
إعداد المكونات يدويًا
عادةً عند استخدام App Startup، يستخدم الكائن InitializationProvider
كيانًا يُسمى
AppInitializer
لاكتشاف أدوات إعداد المكوّنات وتشغيلها تلقائيًا عند بدء تشغيل التطبيق.
ومع ذلك، يمكنك أيضًا استخدام AppInitializer
مباشرةً لإعداد المكونات التي لا يحتاجها تطبيقك عند بدء التشغيل يدويًا. وتُعرف هذه العملية باسم
الإعداد الكسول، ويمكن أن يساعد في تقليل تكاليف بدء التشغيل.
يجب أولاً إيقاف الإعداد التلقائي لأي مكوّنات تريد تهيئتها يدويًا.
إيقاف الإعداد التلقائي لمكوِّن فردي
لإيقاف الإعداد التلقائي لمكوِّن واحد، عليك إزالة الإدخال
<meta-data>
الخاص بموفِّر الإعداد من البيان.
على سبيل المثال، تؤدي إضافة ما يلي إلى ملف البيان إلى إيقاف الإعداد التلقائي لـ ExampleLogger
:
<provider
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
android:exported="false"
tools:node="merge">
<meta-data android:name="com.example.ExampleLoggerInitializer"
tools:node="remove" />
</provider>
يمكنك استخدام tools:node="remove"
في الإدخال بدلاً من إزالة الإدخال للتأكّد من أنّ أداة الدمج تزيل أيضًا الإدخال من جميع ملفات البيان المدمجة الأخرى.
إيقاف الإعداد التلقائي لجميع المكوّنات
لإيقاف الإعداد التلقائي بالكامل، يمكنك إزالة إدخال
InitializationProvider
بالكامل من البيان:
<provider
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
tools:node="remove" />
استدعاء مهيئات المكوّنات يدويًا
إذا تم إيقاف الإعداد التلقائي لأحد المكوّنات، يمكنك استخدام
AppInitializer
لإعداد هذا المكوِّن وتبعياته يدويًا.
على سبيل المثال، يستدعي الرمز التالي AppInitializer
ويضبط ExampleLogger
يدويًا:
Kotlin
AppInitializer.getInstance(context) .initializeComponent(ExampleLoggerInitializer::class.java)
Java
AppInitializer.getInstance(context) .initializeComponent(ExampleLoggerInitializer.class);
نتيجةً لذلك، يتولّى App Startup أيضًا إعداد WorkManager
لأنّ WorkManager
هي تابعة لـ ExampleLogger
.
تقديم ملاحظات
يُرجى مشاركة ملاحظاتك وآرائك معنا من خلال الموارد التالية:
- أداة تتبّع المشاكل
- يمكنك الإبلاغ عن المشاكل حتى نتمكّن من إصلاح الأخطاء.
أفلام مُقترَحة لك
- ملاحظة: يتم عرض نص الرابط عند إيقاف JavaScript.
- بنية التطبيق: طبقة البيانات - جدولة المهام مع WorkManager - مطوّرو تطبيقات Android
- بنية التطبيق: طبقة البيانات - DataStore - مطوّرو تطبيقات Android