تكرار السؤال: …
الإجابة المختصرة
تحدد كيفية فتح الـ Activity في المهام: standard (نسخة جديدة دائمًا)، singleTop (إعادة استخدام القمة)، singleTask (نسخة واحدة في المهمة)، و singleInstance (مهمة معزولة).
الشرح
standard ينشئ نسخة جديدة في كل استدعاء. singleTop يعيد استخدام النشاط إذا كان بالفعل في قمة الـ stack ويستدعي onNewIntent(). singleTask ينشئ مهمة جديدة أو يوجه المستخدم إلى النشاط إذا كان موجودًا في المهمة مع حذف كل الأنشطة التي تعلوه (Clear Top). singleInstance يعزل النشاط في مهمة مستقلة تمامًا ولا يسمح بفتح أنشطة أخرى داخل نفس المهمة.
مثال بالكود
<!-- تعريف launchMode في AndroidManifest.xml -->
<activity
android:name=".SearchActivity"
android:launchMode="singleTop" />
// استقبال البيانات عند إعادة الاستخدام:
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
setIntent(intent)
handleSearchQuery(intent)
}أخطاء شائعة
- نسيان استدعاء setIntent(intent) داخل onNewIntent() مما يبقي الـ Activity معتمدة على الـ Intent القديم.
- الإفراط في استخدام singleTask و singleInstance لكسر السلوك الطبيعي للـ Backstack مما يربك المستخدم.