محدودیت در شروع فعالیت ها از پس زمینه

Android 10 (سطح API 29) و بالاتر محدودیت‌هایی را برای زمانی که برنامه‌ها می‌توانند فعالیت‌های خود را در زمانی که برنامه در پس‌زمینه اجرا می‌شود شروع کنند، قرار می‌دهد. این محدودیت‌ها کمک می‌کنند تا وقفه‌ها برای کاربر به حداقل برسد و کاربر کنترل بیشتری بر آنچه روی صفحه نمایش نشان داده می‌شود حفظ کند.

این راهنما اعلان ها را به عنوان جایگزینی برای شروع فعالیت ها از پس زمینه ارائه می دهد. همچنین موارد خاصی را که محدودیت اعمال نمی شود فهرست می کند.

به جای آن اعلان ها را نمایش دهید

تقریباً در همه موارد، برنامه‌ها در پس‌زمینه باید به جای شروع مستقیم یک فعالیت ، اعلان‌های حساس به زمان را برای ارائه اطلاعات فوری به کاربر نمایش دهند . چنین اعلان‌هایی شامل رسیدگی به تماس تلفنی دریافتی یا ساعت زنگ دار فعال است.

این سیستم هشدار و یادآوری مبتنی بر اعلان چندین مزیت را برای کاربران فراهم می کند:

  • هنگام استفاده از دستگاه، کاربر یک اعلان heads-up را می بیند که به او اجازه می دهد پاسخ دهد. کاربر زمینه فعلی خود را حفظ می کند و بر محتوایی که روی صفحه می بیند کنترل دارد.
  • اعلان‌های حساس به زمان به قوانین مزاحم نشوید کاربر احترام می‌گذارند. برای مثال، زمانی که «مزاحم نشوید» فعال است، کاربران ممکن است فقط از مخاطبین خاص یا تماس‌گیرندگان مکرر اجازه تماس بگیرند.
  • وقتی صفحه نمایش دستگاه خاموش است، هدف تمام صفحه بلافاصله راه اندازی می شود.
  • در صفحه تنظیمات دستگاه، کاربر می تواند ببیند که کدام برنامه ها اخیراً اعلان ارسال کرده اند، از جمله از کانال های اعلان خاص. از این صفحه، کاربر می تواند تنظیمات برگزیده اعلان خود را کنترل کند.

زمانی که برنامه ها می توانند فعالیت ها را شروع کنند

برنامه‌هایی که روی Android نسخه 10 یا بالاتر اجرا می‌شوند، می‌توانند در صورت داشتن یک یا چند مورد از شرایط زیر فعالیت خود را شروع کنند:

  • برنامه دارای یک پنجره قابل مشاهده است، مانند یک فعالیت در پیش زمینه.
  • برنامه دارای یک فعالیت در پشته پشتی کار پیش زمینه است.
  • این برنامه دارای یک فعالیت در پشته پشتی یک کار موجود در صفحه نمایش اخیر است.

  • این برنامه فعالیتی دارد که اخیراً شروع شده است.

  • این اپلیکیشن اخیراً روی یک فعالیت، finish() نامیده است. این فقط زمانی اعمال می‌شود که برنامه یا یک اکتیویتی در پیش‌زمینه یا یک اکتیویتی در پشته پشتی کار پیش‌زمینه در زمان finish() داشته باشد.

  • این برنامه دارای یکی از خدمات زیر است که توسط سیستم محدود شده است. این سرویس ها ممکن است نیاز به راه اندازی یک رابط کاربری داشته باشند.

  • این برنامه دارای سرویسی است که توسط یک برنامه قابل مشاهده متفاوت محدود شده است. برنامه متصل به سرویس باید برای برنامه در پس‌زمینه قابل مشاهده باشد تا فعالیت‌ها را با موفقیت شروع کند.

  • برنامه یک اعلان PendingIntent از سیستم دریافت می کند. در مورد هدف های معلق برای سرویس ها و گیرنده های پخش، برنامه می تواند برای چند ثانیه پس از ارسال هدف معلق فعالیت ها را شروع کند.

  • برنامه یک PendingIntent دریافت می کند که از یک برنامه قابل مشاهده متفاوت ارسال می شود.

  • برنامه پخش سیستمی را دریافت می کند که در آن برنامه انتظار می رود یک رابط کاربری راه اندازی کند. مثال‌ها عبارتند از ACTION_NEW_OUTGOING_CALL و SECRET_CODE_ACTION . برنامه می تواند فعالیت های خود را برای چند ثانیه پس از ارسال پخش شروع کند.

  • این برنامه از طریق API CompanionDeviceManager با یک دستگاه سخت افزاری همراه مرتبط است. این API به برنامه اجازه می‌دهد تا در پاسخ به اقداماتی که کاربر روی یک دستگاه جفت شده انجام می‌دهد، فعالیت‌ها را شروع کند.

  • این برنامه یک کنترل کننده خط مشی دستگاه است که در حالت مالک دستگاه اجرا می شود. موارد استفاده نمونه شامل دستگاه‌های سازمانی کاملاً مدیریت شده و همچنین دستگاه‌های اختصاصی مانند تابلوهای دیجیتال و کیوسک‌ها است.

  • به برنامه مجوز SYSTEM_ALERT_WINDOW توسط کاربر اعطا شده است.

هنگام شروع فعالیت‌ها از PendingIntent، باید انتخاب کنید

برای جلوگیری از شروع تصادفی فعالیت بر اساس شرایط فهرست شده ، از Android 14 APIهای صریحی وجود دارد که به شما امکان می دهد از دادن مجوزهای برنامه برای شروع فعالیت شرکت کنید یا از آن خارج شوید.

برنامه‌هایی که اندروید 15 یا بالاتر را هدف قرار می‌دهند، به‌طور پیش‌فرض دیگر به طور ضمنی امتیازات راه‌اندازی فعالیت پس‌زمینه (BAL) را به PendingIntents که ایجاد می‌کنند اعطا نمی‌کنند. انتخاب صریح لازم است، برای انجام این کار، بسته به اینکه برنامه در حال ارسال یا ایجاد PendingIntents باشد، این گزینه‌ها هستند.

جدول اهداف معلق
شکل 1: جریان تصمیم گیری برای راه اندازی فعالیت های پس زمینه.

توسط فرستنده PendingIntent

برنامه‌هایی که اندروید 14 یا بالاتر را هدف قرار می‌دهند و می‌خواهند PendingIntent راه‌اندازی کنند، باید

  • احراز شرایط ذکر شده و
  • انتخاب کنید تا بر اساس آن استثنائات، فعالیت پس‌زمینه راه‌اندازی شود

این انتخاب فقط در صورتی باید اتفاق بیفتد که توسعه‌دهنده برنامه بداند که برنامه قرار است یک فعالیت را شروع کند.

برای شرکت کردن، برنامه باید یک بسته ActivityOptions با setPendingIntentBackgroundActivityStartMode(ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED) به PendingIntent.send() یا روش‌های مشابه ارسال کند.

توسط خالق قصد معلق

برنامه‌هایی که Android 15 یا بالاتر را هدف قرار می‌دهند و PendingIntent ایجاد می‌کنند، اکنون باید به صراحت شرکت کنند تا بتوانند فعالیت پس‌زمینه را راه‌اندازی کنند، اگر می‌خواهند آن PendingIntents تحت شرایط ذکر شده قابل راه‌اندازی باشد.

در بیشتر موارد، برنامه‌ای که PendingIntent شروع می‌کند باید برنامه‌ای باشد که باید در آن شرکت کند.

  • PendingIntent را می توان در هر زمانی که برنامه ایجاد شده قابل مشاهده باشد شروع کرد.
  • در صورتی که برنامه ایجاد کننده دارای امتیازات خاصی باشد، می توان PendingIntent در هر زمانی شروع کرد.

برای شرکت کردن، برنامه باید یک بسته ActivityOptions با setPendingIntentCreatorBackgroundActivityStartMode (ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED) به PendingIntent.getActivity() یا روش‌های مشابه ارسال کند.

برای جزئیات بیشتر اسناد مرجع مربوطه را بخوانید: