ব্যাকগ্রাউন্ড থেকে কার্যক্রম শুরু করার উপর নিষেধাজ্ঞা

অ্যান্ড্রয়েড ১০ (এপিআই লেভেল ২৯) এবং এর পরবর্তী সংস্করণগুলো ব্যাকগ্রাউন্ডে চলার সময় অ্যাপ কখন বিভিন্ন অ্যাক্টিভিটি শুরু করতে পারবে, তার উপর সীমাবদ্ধতা আরোপ করে। এই সীমাবদ্ধতাগুলো ব্যবহারকারীর জন্য বিঘ্ন কমাতে সাহায্য করে এবং স্ক্রিনে কী দেখানো হবে তার উপর ব্যবহারকারীকে আরও বেশি নিয়ন্ত্রণ দেয়।

এই নির্দেশিকাটি ব্যাকগ্রাউন্ড থেকে কার্যকলাপ শুরু করার বিকল্প হিসেবে নোটিফিকেশনকে উপস্থাপন করে। এটি সেই নির্দিষ্ট ক্ষেত্রগুলিও তালিকাভুক্ত করে যেখানে এই সীমাবদ্ধতা প্রযোজ্য নয়।

পরিবর্তে বিজ্ঞপ্তি প্রদর্শন করুন

প্রায় সব ক্ষেত্রেই, ব্যাকগ্রাউন্ডে থাকা অ্যাপগুলোকে সরাসরি কোনো কাজ শুরু করার পরিবর্তে ব্যবহারকারীকে জরুরি তথ্য দেওয়ার জন্য সময়-সংবেদনশীল নোটিফিকেশন প্রদর্শন করতে হয়। এই ধরনের নোটিফিকেশনের মধ্যে রয়েছে আগত ফোন কল গ্রহণ করা বা সক্রিয় অ্যালার্ম ঘড়ির সংকেত।

এই নোটিফিকেশন-ভিত্তিক সতর্কীকরণ ও অনুস্মারক ব্যবস্থাটি ব্যবহারকারীদের জন্য বেশ কিছু সুবিধা প্রদান করে:

  • ডিভাইসটি ব্যবহার করার সময়, ব্যবহারকারী একটি হেডস-আপ নোটিফিকেশন দেখতে পান যা তাকে প্রতিক্রিয়া জানানোর সুযোগ দেয়। ব্যবহারকারী তার বর্তমান অবস্থা বজায় রাখেন এবং স্ক্রিনে প্রদর্শিত বিষয়বস্তুর উপর তার নিয়ন্ত্রণ থাকে।
  • সময়-নির্ভর নোটিফিকেশনগুলো ব্যবহারকারীর ' ডু নট ডিস্টার্ব' নিয়ম মেনে চলে। উদাহরণস্বরূপ, 'ডু নট ডিস্টার্ব' চালু থাকলে ব্যবহারকারীরা শুধু নির্দিষ্ট কিছু কন্ট্যাক্ট বা বারবার কল করা ব্যক্তিদের কাছ থেকে কল আসার অনুমতি দিতে পারেন।
  • যখন ডিভাইসটির স্ক্রিন বন্ধ থাকে, তখন ফুল-স্ক্রিন ইন্টেন্টটি সঙ্গে সঙ্গে চালু হয়ে যায়।
  • ডিভাইসের সেটিংস স্ক্রিনে, ব্যবহারকারী দেখতে পারেন কোন কোন অ্যাপ সম্প্রতি নোটিফিকেশন পাঠিয়েছে, যার মধ্যে নির্দিষ্ট নোটিফিকেশন চ্যানেলগুলোও অন্তর্ভুক্ত। এই স্ক্রিন থেকে, ব্যবহারকারী তার নোটিফিকেশন সংক্রান্ত পছন্দগুলো নিয়ন্ত্রণ করতে পারেন।

অ্যাপগুলি কখন কার্যক্রম শুরু করতে পারে

অ্যান্ড্রয়েড ১০ বা তার উচ্চতর সংস্করণে চালিত অ্যাপগুলো নিম্নলিখিত এক বা একাধিক শর্ত পূরণ হলে অ্যাক্টিভিটি শুরু করতে পারে:

  • অ্যাপটিতে একটি দৃশ্যমান উইন্ডো রয়েছে, যেমন ফোরগ্রাউন্ডে থাকা একটি অ্যাক্টিভিটি।

  • অ্যাপটির ফোরগ্রাউন্ড টাস্কের ব্যাক স্ট্যাকে একটি অ্যাক্টিভিটি রয়েছে।

  • অ্যাপটির রিসেন্টস স্ক্রিনে থাকা একটি বিদ্যমান টাস্কের ব্যাক স্ট্যাকে একটি অ্যাক্টিভিটি রয়েছে।

  • অ্যাপটিতে খুব সম্প্রতি একটি কার্যকলাপ শুরু হয়েছে।

  • অ্যাপটি খুব সম্প্রতি কোনো একটি অ্যাক্টিভিটিতে finish() কল করেছে। এটি কেবল তখনই প্রযোজ্য যখন finish() কল করার সময় অ্যাপটির কোনো অ্যাক্টিভিটি ফোরগ্রাউন্ডে অথবা ফোরগ্রাউন্ড টাস্কের ব্যাক স্ট্যাকে ছিল।

  • অ্যাপটিতে নিম্নলিখিত পরিষেবাগুলির মধ্যে একটি রয়েছে যা সিস্টেমের সাথে আবদ্ধ। এই পরিষেবাগুলির একটি UI চালু করার প্রয়োজন হতে পারে।

  • অ্যাপটিতে একটি সার্ভিস আছে যা অন্য একটি দৃশ্যমান অ্যাপের সাথে সংযুক্ত। ব্যাকগ্রাউন্ডে থাকা অ্যাপটির কার্যক্রম সফলভাবে শুরু করার জন্য, সার্ভিসের সাথে সংযুক্ত অ্যাপটিকে অবশ্যই দৃশ্যমান থাকতে হবে।

  • অ্যাপটি সিস্টেম থেকে একটি PendingIntent নোটিফিকেশন পায়। সার্ভিস এবং ব্রডকাস্ট রিসিভারের পেন্ডিং ইন্টেন্টের ক্ষেত্রে, ইন্টেন্টটি পাঠানোর পর অ্যাপটি কয়েক সেকেন্ডের জন্য কার্যক্রম শুরু করতে পারে।

  • অ্যাপটি একটি ভিন্ন, দৃশ্যমান অ্যাপ থেকে পাঠানো একটি PendingIntent গ্রহণ করে।

  • অ্যাপটি একটি সিস্টেম ব্রডকাস্ট গ্রহণ করে, যেখান থেকে একটি UI চালু হওয়ার কথা। উদাহরণস্বরূপ ACTION_NEW_OUTGOING_CALL এবং SECRET_CODE_ACTION । ব্রডকাস্টটি পাঠানোর পর অ্যাপটি কয়েক সেকেন্ডের জন্য বিভিন্ন কার্যক্রম শুরু করতে পারে।

  • অ্যাপটি CompanionDeviceManager API-এর মাধ্যমে একটি সহযোগী হার্ডওয়্যার ডিভাইসের সাথে যুক্ত থাকে। এই API-টি ব্যবহারকারীকে পেয়ার করা ডিভাইসে বিভিন্ন কাজ করার প্রতিক্রিয়ায় অ্যাপটিকে কার্যক্রম শুরু করার সুযোগ দেয়।

  • অ্যাপটি ডিভাইস ওনার মোডে চলমান একটি ডিভাইস পলিসি কন্ট্রোলার । এর ব্যবহারিক উদাহরণের মধ্যে রয়েছে সম্পূর্ণরূপে পরিচালিত এন্টারপ্রাইজ ডিভাইস এবং ডিজিটাল সাইনেজ ও কিয়স্কের মতো ডেডিকেটেড ডিভাইস

  • ব্যবহারকারী অ্যাপটিকে SYSTEM_ALERT_WINDOW অনুমতিটি প্রদান করেছেন।

পেন্ডিং ইনটেন্ট থেকে অ্যাক্টিভিটি শুরু করার সময় অপ্ট-ইন করা আবশ্যক।

তালিকাভুক্ত শর্তগুলোর উপর ভিত্তি করে দুর্ঘটনাবশত অ্যাক্টিভিটি চালু হওয়া এড়ানোর জন্য, অ্যান্ড্রয়েড ১৪ থেকে সুস্পষ্ট এপিআই (API) রয়েছে, যা আপনাকে কোনো অ্যাপকে অ্যাক্টিভিটি চালুর অনুমতি দেওয়া বা না দেওয়ার সুযোগ দেয়।

অ্যান্ড্রয়েড ১৫ বা তার উচ্চতর সংস্করণকে লক্ষ্য করে তৈরি অ্যাপগুলো এখন থেকে ডিফল্টভাবে তাদের তৈরি করা PendingIntents আর পরোক্ষভাবে ব্যাকগ্রাউন্ড অ্যাক্টিভিটি লঞ্চ (BAL) করার অনুমতি দেবে না। এটি করার জন্য সুস্পষ্টভাবে সম্মতি দেওয়া প্রয়োজন; অ্যাপটি PendingIntents পাঠাচ্ছে নাকি তৈরি করছে, তার উপর নির্ভর করে এই বিকল্পগুলো রয়েছে।

মুলতুবি অভিপ্রায় সারণী
চিত্র ১: ব্যাকগ্রাউন্ড অ্যাক্টিভিটি চালু করার সিদ্ধান্ত প্রবাহ।

অপেক্ষাধীন অভিপ্রায়ের প্রেরকের দ্বারা

অ্যান্ড্রয়েড ১৪ বা তার উচ্চতর সংস্করণকে লক্ষ্য করে তৈরি যে অ্যাপগুলো একটি PendingIntent শুরু করতে চায়, তাদের অবশ্যই

  • তালিকাভুক্ত শর্তগুলো পূরণ করুন এবং
  • সেই ব্যতিক্রমগুলির উপর ভিত্তি করে ব্যাকগ্রাউন্ড কার্যকলাপ চালু করার অনুমতি দিতে সম্মতি দিন।

এই অপ্ট-ইনটি কেবল তখনই হওয়া উচিত, যখন অ্যাপ ডেভেলপার জানেন যে অ্যাপটি একটি অ্যাক্টিভিটি শুরু করতে চলেছে।

অংশগ্রহণ করতে, অ্যাপটিকে PendingIntent.send() বা অনুরূপ মেথডগুলিতে setPendingIntentBackgroundActivityStartMode(ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED) সহ একটি ActivityOptions বান্ডেল পাস করতে হবে।

বিচারাধীন অভিপ্রায়ের স্রষ্টার দ্বারা

অ্যান্ড্রয়েড ১৫ বা তার উচ্চতর সংস্করণকে লক্ষ্য করে তৈরি অ্যাপগুলো যদি কোনো PendingIntent তৈরি করে এবং তালিকাভুক্ত শর্তাবলীর অধীনে PendingIntents চালু করতে চায়, তবে এখন থেকে তাদের অবশ্যই ব্যাকগ্রাউন্ড অ্যাক্টিভিটি চালুর অনুমতি স্পষ্টভাবে বেছে নিতে হবে।

বেশিরভাগ ক্ষেত্রে, যে অ্যাপটি PendingIntent শুরু করছে, সেটিরই সম্মতি দেওয়া উচিত। তবে, যদি সৃষ্টিকারী অ্যাপটির এই বিশেষাধিকারগুলো মঞ্জুর করার প্রয়োজন হয়:

  • ক্রিয়েটিং অ্যাপটি দৃশ্যমান থাকা অবস্থায় যেকোনো সময়ে PendingIntent শুরু করা যেতে পারে।
  • যদি সৃষ্টিকারী অ্যাপটির বিশেষ অধিকার থাকে, তবে PendingIntent যেকোনো সময় শুরু করা যেতে পারে।

অংশগ্রহণ করতে হলে, অ্যাপটিকে PendingIntent.getActivity() বা অনুরূপ মেথডগুলিতে setPendingIntentCreatorBackgroundActivityStartMode (ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED) সহ একটি ActivityOptions বান্ডেল পাস করতে হবে।

আরও বিস্তারিত জানতে প্রাসঙ্গিক রেফারেন্স ডকুমেন্টেশন পড়ুন:

কঠোর মোড

অ্যান্ড্রয়েড ১৬ থেকে শুরু করে, অ্যাপ ডেভেলপাররা স্ট্রিক্ট মোড চালু করতে পারেন, যার ফলে কোনো অ্যাক্টিভিটি চালু হওয়া ব্লক হয়ে গেলে (অথবা অ্যাপটির টার্গেট SDK চালু হলে ব্লক হওয়ার ঝুঁকিতে থাকলে) নোটিফিকেশন পাওয়া যায়।

আপনার অ্যাপ্লিকেশন, অ্যাক্টিভিটি বা অন্য কোনো অ্যাপ্লিকেশন কম্পোনেন্টের Application.onCreate() মেথড থেকে শুরুতেই সক্রিয় করার জন্য উদাহরণ কোড:

 override fun onCreate(savedInstanceState: Bundle?) {
     super.onCreate(savedInstanceState)
     StrictMode.setVmPolicy(
         StrictMode.VmPolicy.Builder()
         .detectBlockedBackgroundActivityLaunch()
         .penaltyLog()
         .build());
     )
 }

আরও বিস্তারিত জানতে Strict মোডের ডকুমেন্টেশন পড়ুন।