অ্যান্ড্রয়েড 16 প্ল্যাটফর্মে এমন আচরণের পরিবর্তন রয়েছে যা আপনার অ্যাপকে প্রভাবিত করতে পারে। নিম্নলিখিত আচরণ পরিবর্তনগুলি সমস্ত অ্যাপের ক্ষেত্রে প্রযোজ্য যখন সেগুলি Android 16 এ চলে, targetSdkVersion
নির্বিশেষে। আপনার অ্যাপটি পরীক্ষা করা উচিত এবং তারপরে এই পরিবর্তনগুলিকে সমর্থন করার জন্য প্রয়োজন অনুসারে এটি সংশোধন করা উচিত, যেখানে প্রযোজ্য।
শুধুমাত্র Android 16 টার্গেট করা অ্যাপগুলিকে প্রভাবিত করে এমন আচরণের পরিবর্তনগুলির তালিকা পর্যালোচনা করা নিশ্চিত করুন।
মূল কার্যকারিতা
Android 16-এ নিম্নলিখিত পরিবর্তনগুলি অন্তর্ভুক্ত রয়েছে যা Android সিস্টেমের বিভিন্ন মূল ক্ষমতাগুলিকে সংশোধন বা প্রসারিত করে৷
চাকরির সময়সূচি কোটা অপ্টিমাইজেশান
অ্যান্ড্রয়েড 16 থেকে শুরু করে, আমরা নিম্নলিখিত বিষয়গুলির উপর ভিত্তি করে নিয়মিত এবং দ্রুত কাজ সম্পাদনের রানটাইম কোটা সামঞ্জস্য করছি:
- অ্যাপ্লিকেশানটি কোন অ্যাপ স্ট্যান্ডবাই বালতিতে রয়েছে : Android 16-এ, সক্রিয় স্ট্যান্ডবাই বাকেটগুলি উদার রানটাইম কোটা দ্বারা প্রয়োগ করা শুরু হবে৷
- অ্যাপটি শীর্ষ অবস্থায় থাকাকালীন চাকরিটি কার্যকর করা শুরু করলে : Android 16-এ, অ্যাপটি ব্যবহারকারীর কাছে দৃশ্যমান থাকাকালীন চাকরি শুরু হয় এবং অ্যাপটি অদৃশ্য হয়ে যাওয়ার পরেও চলতে থাকে, চাকরির রানটাইম কোটা মেনে চলবে।
- যদি একটি ফোরগ্রাউন্ড পরিষেবা চালানোর সময় কাজটি কার্যকর করা হয় : Android 16-এ, একটি ফোরগ্রাউন্ড পরিষেবার সাথে একযোগে কাজ চালানোর সময় চাকরির রানটাইম কোটা মেনে চলবে। আপনি যদি ব্যবহারকারীর সূচনাকৃত ডেটা স্থানান্তরের জন্য কাজের সুবিধা নিয়ে থাকেন, তবে পরিবর্তে ব্যবহারকারীর সূচিত ডেটা স্থানান্তর কাজগুলি ব্যবহার করার কথা বিবেচনা করুন।
এই পরিবর্তনটি WorkManager, JobScheduler, এবং DownloadManager ব্যবহার করে নির্ধারিত কাজগুলিকে প্রভাবিত করে৷ কেন একটি কাজ বন্ধ করা হয়েছিল তা ডিবাগ করার জন্য, আমরা WorkInfo.getStopReason()
(JobScheduler কাজের জন্য, JobParameters.getStopReason()
) কল করে কল করে কেন আপনার কাজ বন্ধ করা হয়েছিল তা লগ করার পরামর্শ দিই।
ব্যাটারি-অনুকূল সর্বোত্তম অনুশীলন সম্পর্কে আরও তথ্যের জন্য, টাস্ক শিডিউলিং API-এর জন্য ব্যাটারি ব্যবহার অপ্টিমাইজ করার নির্দেশিকা পড়ুন।
আমরা Android 16-এ প্রবর্তিত নতুন JobScheduler#getPendingJobReasonsHistory
API ব্যবহার করার পরামর্শ দিচ্ছি কেন একটি চাকরি কার্যকর করা হয়নি তা বোঝার জন্য।
টেস্টিং
আপনার অ্যাপের আচরণ পরীক্ষা করার জন্য, আপনি নির্দিষ্ট চাকরির কোটা অপ্টিমাইজেশনের ওভাররাইড সক্ষম করতে পারেন যতক্ষণ না অ্যাপটি একটি Android 16 ডিভাইসে চলছে।
"শীর্ষ রাষ্ট্র চাকরীর রানটাইম কোটা মেনে চলবে" এর প্রয়োগ অক্ষম করতে, নিম্নলিখিত adb
কমান্ডটি চালান:
adb shell am compat enable OVERRIDE_QUOTA_ENFORCEMENT_TO_TOP_STARTED_JOBS APP_PACKAGE_NAME
"যে কাজগুলি একযোগে একটি ফোরগ্রাউন্ড পরিষেবার সাথে কাজ চালানোর সময় কাজ রানটাইম কোটা মেনে চলবে" এর প্রয়োগকে নিষ্ক্রিয় করতে, নিম্নলিখিত adb
কমান্ডটি চালান:
adb shell am compat enable OVERRIDE_QUOTA_ENFORCEMENT_TO_FGS_JOBS APP_PACKAGE_NAME
নির্দিষ্ট অ্যাপ স্ট্যান্ডবাই বালতি আচরণ পরীক্ষা করতে, আপনি নিম্নলিখিত adb
কমান্ড ব্যবহার করে আপনার অ্যাপের অ্যাপ স্ট্যান্ডবাই বাকেট সেট করতে পারেন:
adb shell am set-standby-bucket APP_PACKAGE_NAME active|working_set|frequent|rare|restricted
আপনার অ্যাপটি যে অ্যাপ স্ট্যান্ডবাই বালতিতে রয়েছে তা বোঝার জন্য, আপনি নিম্নলিখিত adb
কমান্ড ব্যবহার করে আপনার অ্যাপের অ্যাপ স্ট্যান্ডবাই বাকেট পেতে পারেন:
adb shell am get-standby-bucket APP_PACKAGE_NAME
JobInfo#setImportantWhileForeground সম্পূর্ণরূপে অবজ্ঞা করা হচ্ছে
JobInfo.Builder#setImportantWhileForeground(boolean)
পদ্ধতি একটি কাজের গুরুত্ব নির্দেশ করে যখন সময়সূচী অ্যাপটি অগ্রভাগে থাকে বা যখন সাময়িকভাবে ব্যাকগ্রাউন্ড সীমাবদ্ধতা থেকে অব্যাহতি দেওয়া হয়।
Android 12 (API লেভেল 31) থেকে এই পদ্ধতিটি অবমূল্যায়িত হয়েছে। অ্যান্ড্রয়েড 16 থেকে শুরু করে, এটি আর কার্যকরভাবে কাজ করে না এবং এই পদ্ধতিতে কল করা উপেক্ষা করা হবে।
কার্যকারিতার এই অপসারণ JobInfo#isImportantWhileForeground()
ক্ষেত্রেও প্রযোজ্য। অ্যান্ড্রয়েড 16 থেকে শুরু করে, যদি পদ্ধতিটি বলা হয়, তবে পদ্ধতিটি false
ফেরত দেয়।
আদেশকৃত সম্প্রচার অগ্রাধিকার সুযোগ আর বিশ্বব্যাপী নয়
অ্যান্ড্রয়েড অ্যাপ্লিকেশানগুলিকে ব্রডকাস্ট রিসিভারগুলিতে অগ্রাধিকার নির্ধারণ করার অনুমতি দেওয়া হয় যাতে রিসিভারগুলি সম্প্রচারটি গ্রহণ করে এবং প্রক্রিয়া করে তা নিয়ন্ত্রণ করতে। ম্যানিফেস্ট-ঘোষিত রিসিভারগুলির জন্য, অ্যাপগুলি অগ্রাধিকার নির্ধারণ করতে android:priority
বৈশিষ্ট্য ব্যবহার করতে পারে এবং প্রসঙ্গ-নিবন্ধিত রিসিভারগুলির জন্য, অ্যাপগুলি অগ্রাধিকার নির্ধারণ করতে IntentFilter#setPriority()
API ব্যবহার করতে পারে৷ যখন একটি সম্প্রচার পাঠানো হয়, সিস্টেমটি সর্বোচ্চ থেকে সর্বনিম্ন পর্যন্ত তাদের অগ্রাধিকারের ক্রমানুসারে রিসিভারদের কাছে পৌঁছে দেয়।
Android 16-এ, বিভিন্ন প্রক্রিয়া জুড়ে android:priority
অ্যাট্রিবিউট বা IntentFilter#setPriority()
ব্যবহার করে ব্রডকাস্ট ডেলিভারি অর্ডার নিশ্চিত করা হবে না। সম্প্রচার অগ্রাধিকার শুধুমাত্র সমস্ত প্রক্রিয়ার পরিবর্তে একই আবেদন প্রক্রিয়ার মধ্যে সম্মান করা হবে।
এছাড়াও, সম্প্রচারের অগ্রাধিকারগুলি স্বয়ংক্রিয়ভাবে পরিসরে সীমাবদ্ধ থাকবে ( SYSTEM_LOW_PRIORITY
+ 1, SYSTEM_HIGH_PRIORITY
- 1)৷ শুধুমাত্র সিস্টেমের উপাদানগুলিকে SYSTEM_LOW_PRIORITY
, SYSTEM_HIGH_PRIORITY
সম্প্রচার অগ্রাধিকার হিসাবে সেট করার অনুমতি দেওয়া হবে৷
আপনার অ্যাপটি নিম্নোক্ত যেকোনো একটি করলে প্রভাবিত হতে পারে:
- আপনার আবেদন একই সম্প্রচার অভিপ্রায় সহ একাধিক প্রক্রিয়া ঘোষণা করেছে এবং অগ্রাধিকারের উপর ভিত্তি করে একটি নির্দিষ্ট ক্রমে সেই অভিপ্রায়গুলি পাওয়ার আশেপাশে প্রত্যাশা রয়েছে৷
- আপনার আবেদন প্রক্রিয়া অন্যান্য প্রক্রিয়ার সাথে ইন্টারঅ্যাক্ট করে এবং একটি নির্দিষ্ট ক্রমে একটি সম্প্রচারের অভিপ্রায় প্রাপ্তির আশা রাখে।
যদি প্রক্রিয়াগুলি একে অপরের সাথে সমন্বয় করতে হয়, তবে তাদের অন্যান্য সমন্বয় চ্যানেল ব্যবহার করে যোগাযোগ করা উচিত।
ART অভ্যন্তরীণ পরিবর্তন
অ্যান্ড্রয়েড 16 এ অ্যান্ড্রয়েড রানটাইম (এআরটি) এর সর্বশেষ আপডেটগুলি অন্তর্ভুক্ত করে যা অ্যান্ড্রয়েড রানটাইমের (এআরটি) কর্মক্ষমতা উন্নত করে এবং অতিরিক্ত জাভা বৈশিষ্ট্যগুলির জন্য সমর্থন প্রদান করে। Google Play সিস্টেম আপডেটের মাধ্যমে, এই উন্নতিগুলি Android 12 (API স্তর 31) এবং উচ্চতর চলমান এক বিলিয়নেরও বেশি ডিভাইসে উপলব্ধ।
এই পরিবর্তনগুলি প্রকাশিত হওয়ার সাথে সাথে, ART-এর অভ্যন্তরীণ কাঠামোর উপর নির্ভর করে এমন লাইব্রেরি এবং অ্যাপ কোডগুলি Android 16 চালিত ডিভাইসগুলিতে সঠিকভাবে কাজ নাও করতে পারে, সেই সাথে আগের Android সংস্করণগুলি যা Google Play সিস্টেম আপডেটের মাধ্যমে ART মডিউল আপডেট করে।
অভ্যন্তরীণ কাঠামোর উপর নির্ভর করা (যেমন নন-SDK ইন্টারফেস ) সর্বদা সামঞ্জস্যের সমস্যার দিকে পরিচালিত করতে পারে, তবে অভ্যন্তরীণ এআরটি কাঠামোর উপকার করে এমন কোড (বা কোড ধারণকারী লাইব্রেরি) এর উপর নির্ভর করা এড়ানো বিশেষভাবে গুরুত্বপূর্ণ, যেহেতু ART পরিবর্তনগুলি প্ল্যাটফর্মের সাথে আবদ্ধ নয়। ডিভাইসটির সংস্করণটি চলছে এবং তারা Google Play সিস্টেম আপডেটের মাধ্যমে এক বিলিয়নেরও বেশি ডিভাইসে চলে যায়।
সমস্ত ডেভেলপারদের Android 16-এ তাদের অ্যাপ্লিকেশানগুলি পুঙ্খানুপুঙ্খভাবে পরীক্ষা করে তাদের অ্যাপ প্রভাবিত হয়েছে কিনা তা পরীক্ষা করা উচিত। উপরন্তু, আপনার অ্যাপটি অভ্যন্তরীণ ART কাঠামোর উপর নির্ভর করে এমন কোনও লাইব্রেরির উপর নির্ভর করে যা আমরা চিহ্নিত করেছি কিনা তা দেখতে পরিচিত সমস্যাগুলি পরীক্ষা করুন। আপনার যদি অ্যাপ কোড বা লাইব্রেরি নির্ভরতা থাকে যা প্রভাবিত হয়, যখনই সম্ভব সর্বজনীন API বিকল্পগুলি সন্ধান করুন এবং আমাদের ইস্যু ট্র্যাকারে একটি বৈশিষ্ট্য অনুরোধ তৈরি করে নতুন ব্যবহারের ক্ষেত্রে সর্বজনীন APIগুলির জন্য অনুরোধ করুন৷
ব্যবহারকারীর অভিজ্ঞতা এবং সিস্টেম UI
Android 16-এ নিম্নলিখিত পরিবর্তনগুলি অন্তর্ভুক্ত রয়েছে যা আরও সামঞ্জস্যপূর্ণ, স্বজ্ঞাত ব্যবহারকারীর অভিজ্ঞতা তৈরি করার উদ্দেশ্যে করা হয়েছে৷
ব্যাঘাতমূলক অ্যাক্সেসিবিলিটি ঘোষণাগুলিকে অবজ্ঞা করা হচ্ছে
Android 16 অ্যাকসেসিবিলিটি ঘোষণাগুলিকে বাতিল করে, যা announceForAccessibility
ব্যবহার বা TYPE_ANNOUNCEMENT
অ্যাক্সেসিবিলিটি ইভেন্টগুলির প্রেরণের দ্বারা চিহ্নিত৷ এগুলি টকব্যাক এবং অ্যান্ড্রয়েডের স্ক্রিন রিডার ব্যবহারকারীদের জন্য অসামঞ্জস্যপূর্ণ ব্যবহারকারীর অভিজ্ঞতা তৈরি করতে পারে এবং বিকল্পগুলি Android এর বিভিন্ন সহায়ক প্রযুক্তি জুড়ে ব্যবহারকারীর চাহিদার বিস্তৃত পরিসরকে আরও ভালভাবে পরিবেশন করে৷
বিকল্পের উদাহরণ:
- উইন্ডো পরিবর্তনের মতো উল্লেখযোগ্য UI পরিবর্তনের জন্য
Activity.setTitle(CharSequence)
এবংsetAccessibilityPaneTitle(java.lang.CharSequence)
ব্যবহার করুন। রচনায়,Modifier.semantics { paneTitle = "paneTitle" }
- ব্যবহারকারীকে গুরুত্বপূর্ণ UI-তে পরিবর্তন সম্পর্কে অবহিত করতে,
setAccessibilityLiveRegion(int)
ব্যবহার করুন। রচনায়,Modifier.semantics { liveRegion = LiveRegionMode.[Polite|Assertive]}
। এগুলি অল্প ব্যবহার করা উচিত কারণ প্রতিবার ভিউ আপডেট করার সময় এগুলি ঘোষণা তৈরি করতে পারে৷ - ব্যবহারকারীদের ত্রুটি সম্পর্কে অবহিত করতে,
AccessibilityEvent#CONTENT_CHANGE_TYPE_ERROR
ধরনের একটিAccessibilityEvent
পাঠান এবংAccessibilityNodeInfo#setError(CharSequence)
সেট করুন, অথবাTextView#setError(CharSequence)
ব্যবহার করুন।
অপ্রচলিত announceForAccessibility
API-এর রেফারেন্স ডকুমেন্টেশনে প্রস্তাবিত বিকল্পগুলি সম্পর্কে আরও বিশদ অন্তর্ভুক্ত রয়েছে৷
3-বোতাম নেভিগেশন জন্য সমর্থন
Android 16 সঠিকভাবে ভবিষ্যদ্বাণীমূলক ব্যাক-এ স্থানান্তরিত অ্যাপগুলির জন্য 3-বোতাম নেভিগেশনে ভবিষ্যদ্বাণীমূলক ব্যাক সমর্থন নিয়ে আসে। পিছনের বোতামটি দীর্ঘক্ষণ চাপলে একটি ভবিষ্যদ্বাণীমূলক ব্যাক অ্যানিমেশন শুরু হয়, যা আপনাকে পিছনের সোয়াইপ আপনাকে কোথায় নিয়ে যায় তার একটি পূর্বরূপ দেয়।
এই আচরণটি সিস্টেমের সমস্ত ক্ষেত্র জুড়ে প্রযোজ্য যা ভবিষ্যদ্বাণীমূলক ব্যাক অ্যানিমেশনগুলিকে সমর্থন করে, যার মধ্যে সিস্টেম অ্যানিমেশনগুলি (ব্যাক-টু-হোম, ক্রস-টাস্ক, এবং ক্রস-অ্যাক্টিভিটি) সহ।