Multi-Window: ماهیت، حالت‌های چندوظیفه‌ای در اندروید

نویسنده: IT Sectr منتشر شده: 2026-06-08 زمان مطالعه: 10 دقیقه

Multi-Window — مجموعه‌ای از حالت‌های چندوظیفه‌ای در اندروید است که به اجرای همزمان چندین برنامه روی صفحه نمایش می‌دهد. سیستم شامل سه حالت است: Split Screen برای تقسیم صفحه به دو بخش، Picture-in-Picture برای ویدیو در پنجره کوچک و Freeform برای پنجره‌های با اندازه دلخواه در صفحه‌های بزرگ. طبق Android Developers (2025)، پشتیبانی از Multi-Window برای دستگاه‌هایی با عرض صفحه 600 dp و بیشتر اجباری است و هر توسعه‌دهنده باید برنامه را برای تغییرات اندازه پنجره تطبیق دهد.

نکات اصلی

  • Multi-Window — سیستم چندوظیفه‌ای اندروید با سه حالت: Split Screen، PiP، Freeform.
  • Split Screen — دو برنامه کنار هم، جداکننده قابل کشیدن، نسبت‌ها تغییر می‌کنند.
  • Picture-in-Picture — ویدیو در پنجره کوچک روی سایر برنامه‌ها.
  • Freeform — پنجره‌های با اندازه دلخواه در Android TV و صفحه‌های بزرگ.
  • ResizeableActivity — پرچم در مانیفست برای اعلام پشتیبانی از حالت چندپنجره‌ای.

Multi-Window در اندروید چیست؟

Multi-Window — قابلیتی در اندروید است که در نسخه 7.0 Nougat (API 24) معرفی شد و به اجرای همزمان دو یا چند برنامه روی صفحه نمایش می‌دهد. این حالت پاسخی از سوی گوگل به محبوبیت روزافزون تبلت‌ها و دستگاه‌های با صفحه بزرگ بود، جایی که حالت تک‌وظیفه‌ای بهره‌وری را محدود می‌کند.

قبل از اندروید 7.0 هر برنامه تمام صفحه را اشغال می‌کرد — هنگام جابجایی بین برنامه‌ها، برنامه قبلی جمع می‌شد. Multi-Window این مدل را تغییر داد: اکنون برنامه می‌تواند بخشی از صفحه را اشغال کرده و فعال بماند. برای توسعه‌دهنده این意味着 onConfigurationChanged و مدیریت تغییر اندازه اجباری می‌شود.

در اندروید 12L (2022) گوگل Multi-Window را به حالت پیش‌فرض برای دستگاه‌های با صفحه بزرگ تبدیل کرد — همه برنامه‌ها در تبلت‌ها در حالتی اجرا می‌شوند که چندپنجره‌ای را مجاز می‌کند. استثنا فقط برنامه‌هایی هستند که در مانیفست صراحتاً ممنوع شده‌اند.

حالت‌های Multi-Window: Split Screen، PiP، Freeform

Split Screen — رایج‌ترین حالت. صفحه به دو بخش افقی یا عمودی تقسیم می‌شود، کاربر جداکننده را می‌کشد. در تلفن‌ها و تبلت‌ها در دسترس است. از طریق Overview (Recents) فعال می‌شود — با کشیدن آیکون برنامه به لبه بالایی یا پایینی.

Picture-in-Picture (PiP) — حالت برای برنامه‌های ویدیویی و ناوبری. محتوا در یک پنجره کوچک شناور (حدود 15–25% صفحه) نمایش داده می‌شود که قابل جابجایی است. در اندروید 8.0+ در دسترس است. برای فعال‌سازی از enterPictureInPictureMode() در Activity استفاده می‌شود.

Freeform — حالت پنجره‌های با اندازه دلخواه، شبیه به مدیران پنجره دسکتاپ. در Android TV و برخی دستگاه‌های با صفحه بزرگ تولیدکنندگان (Samsung DeX) در دسترس است. برنامه‌ها در پنجره‌هایی با عنوان و دکمه‌های کنترل اجرا می‌شوند.

Multi-Window چگونه کار می‌کند

وقتی کاربر Multi-Window را فعال می‌کند، اندروید یک نمونه Activity جدید برای هر برنامه ایجاد می‌کند و فضای موجود صفحه را توزیع می‌کند. فعالیت‌ها در Taskهای جداگانه قرار می‌گیرند، اما از یک StackView با جداکننده بین آنها استفاده می‌کنند.

سیستم هر Activity را از تغییر اندازه از طریق onConfigurationChanged() مطلع می‌کند. اگر Activity این رویداد را مدیریت نکند — دوباره ایجاد می‌شود (recreate). برای Split Screen عرض پنجره می‌تواند تا 220 dp — حداقل عرض پشتیبانی شده توسط پلتفرم — کاهش یابد.

اندروید به برنامه اجازه می‌دهد حداقل عرض را از طریق android:minWidth و android:minHeight در مانیفست اعلام کند. اگر فضای موجود کمتر از مقادیر مشخص شده باشد — Activity به حالت مکث می‌رود.

تطبیق Activity با حالت چندپنجره‌ای

برای پشتیبانی از Multi-Window باید پرچم android:resizeableActivity="true" را در مانیفست تنظیم کنید. این به این معنی است که برنامه می‌تواند با تغییر پنجره اندازه خود را تغییر دهد. به طور پیش‌فرض در اندروید 12L+ همه برنامه‌ها resizeable محسوب می‌شوند — پرچم نادیده گرفته می‌شود.

هنگام تغییر اندازه پنجره، Activity می‌تواند دوباره ایجاد شود (پیش‌فرض) یا رویداد را در onConfigurationChanged مدیریت کند، اگر در مانیفست configChanges="screenSize|smallestScreenSize" مشخص شده باشد. توصیه می‌شود برای Activityهای کلیدی configChanges مشخص کنید تا از از دست رفتن حالت جلوگیری شود.

xml
<activity
    android:name=".MainActivity"
    android:resizeableActivity="true"
    android:configChanges="screenSize|smallestScreenSize|orientation" />

برای برنامه‌هایی که تغییر اندازه را پشتیبانی نمی‌کنند، اندروید یک کادر محاوره‌ای با هشدار نمایش می‌دهد. در این حالت هنگام تغییر به حالت چندپنجره‌ای، سیستم می‌تواند Activity را خاتمه داده و snackbar با پیشنهاد راه‌اندازی مجدد نشان دهد.

Multi-Window و چرخه حیات Activity

Multi-Window چرخه حیات استاندارد Activity را تغییر می‌دهد. وقتی برنامه دیگری در پنجره مجاور فعال می‌شود، Activity فعلی فراخوانی onPause() را دریافت می‌کند، اما onStop() را نه — هنوز قابل مشاهده است، اگرچه در فوکوس نیست. این مهم است: پخش‌کننده ویدیو باید پخش را در onPause ادامه دهد، نه در onStop.

توسعه‌دهنده باید حالت‌ها را تشخیص دهد: onPause + isInMultiWindowMode() = true فقط به معنی از دست دادن فوکوس است، نه خروج از صفحه. برای ویدیو و انیمیشن‌ها این سیگنالی است که پخش را متوقف نکنید، فقط برجسته‌سازی را از عناصر کنترل بردارید.

در خروج از Multi-Window، onMultiWindowModeChanged() قبل از onResume() فراخوانی می‌شود. این امکان را می‌دهد که قبل از شروع تعامل کاربر، رابط را برای حالت تمام صفحه بازسازی کنید.

بهترین روش‌ها برای Multi-Window

اولین قانون — حفظ حالت. در حالت چندپنجره‌ای Activity می‌تواند در هر لحظه دوباره ایجاد شود. از SavedStateHandle در ViewModel یا onSaveInstanceState برای تمام داده‌هایی که باید بین تغییرات پیکربندی حفظ شوند استفاده کنید.

دوم — آزمایش در حداقل عرض 220 dp. این مقدار باریک‌ترین پنجره در Split Screen در نظر گرفته می‌شود. رابط باید خوانا و کاربردی باقی بماند. اگر برخی عناصر از مرزها خارج می‌شوند — از Window Size Class برای جابجایی بین چیدمان‌ها استفاده کنید.

سوم — غیرفعال کردن عملکردی که در Multi-Window کار نمی‌کند. به عنوان مثال، Camera ممکن است اگر صفحه خیلی کوچک باشد در دسترس نباشد. قبل از راه‌اندازی دوربین یا سایر عملکردهای تمام صفحه، isInMultiWindowMode() را بررسی کنید.

سوالات متداول

چگونه Multi-Window را برای برنامه خود ممنوع کنیم؟

android:resizeableActivity="false" را در مانیفست تنظیم کنید. در اندروید 12L+ پرچم برای دستگاه‌های با صفحه بزرگ نادیده گرفته می‌شود، بنابراین برای ممنوعیت کامل از android:maxAspectRatio استفاده کنید.

چگونه تشخیص دهیم که برنامه در Multi-Window است؟

isInMultiWindowMode() را از Activity فراخوانی کنید. اگر برنامه در Split Screen، PiP یا Freeform کار کند، متد true برمی‌گرداند. همچنین می‌توانید روی onMultiWindowModeChanged() مشترک شوید.

آیا Multi-Window در Android TV کار می‌کند؟

در Android TV فقط حالت Picture-in-Picture در دسترس است. Split Screen و Freeform پشتیبانی نمی‌شوند — تلویزیون‌ها از یک صفحه اصلی با پنجره PiP در گوشه استفاده می‌کنند.

چه اتفاقی برای foreground-service در Multi-Window می‌افتد؟

Foreground-service صرف‌نظر از حالت به کار خود ادامه می‌دهد. اما اگر برنامه به PiP برود، سیستم ممکن است برای صرفه‌جویی در منابع اجرا را موقتاً متوقف کند.

چگونه کشیدن و رها کردن (Drag and Drop) بین پنجره‌ها را مدیریت کنیم؟

اندروید از Drag and Drop بین پنجره‌ها در Multi-Window از طریق ClipData و View.OnDragListener پشتیبانی می‌کند. داده‌ها از طریق ContentProvider یا Intent با FLAG_GRANT_READ_URI_PERMISSION منتقل می‌شوند.

خلاصه

  • Multi-Window — چندوظیفه‌ای اندروید با سه حالت برای کار همزمان برنامه‌ها.
  • Split Screen — تقسیم صفحه به دو بخش با جداکننده قابل کشیدن.
  • Picture-in-Picture — ویدیو در پنجره کوچک برای اندروید 8.0+.
  • Freeform — پنجره‌های با اندازه دلخواه در Android TV و Samsung DeX.
  • resizeableActivity — پرچم اجباری در مانیفست برای پشتیبانی از حالت.
  • onMultiWindowModeChanged — callback برای بازسازی رابط در ورود/خروج.
  • نتیجه‌گیری — Multi-Window از سال 2022 برای همه برنامه‌ها در صفحه‌های بزرگ الزامی است.

ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد

IT Sectr از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه

همچنین بخوانید