টাস্ক শিডিউলিং API-এর জন্য ব্যাটারি ব্যবহার অপ্টিমাইজ করুন

এই পৃষ্ঠাটি ভাল-আচরণ করা ব্যাকগ্রাউন্ড কাজগুলি সেট আপ করার জন্য কয়েকটি সেরা অনুশীলনের পরামর্শ দেয়৷ এই সর্বোত্তম অভ্যাসগুলি বিশেষভাবে ব্যাটারি খরচ হ্রাস করার লক্ষ্যে তৈরি করা হয়, তবে তারা নেটওয়ার্ক ব্যবহার হ্রাস করার মতো অন্যান্য উপায়েও ডিভাইসের কার্যকারিতা উন্নত করতে পারে।

সর্বোত্তম সীমাবদ্ধতা চয়ন করুন এবং কাজগুলি একত্রিত করুন

ডিভাইসে আপনার কাজের স্থান লোড কমাতে, সর্বোত্তম সীমাবদ্ধতাগুলি নির্দিষ্ট করা গুরুত্বপূর্ণ৷ (JobScheduler চাকরির জন্য, সীমাবদ্ধতার তালিকার জন্য JobInfo.Builder দেখুন।) একটি উদাহরণ নিতে, আপনি যদি নিশ্চিত করতে চান যে আপনার অ্যাপের ব্যাটারি শেষ হয়ে যাচ্ছে না, তাহলে RequiresCharging সীমাবদ্ধতা নির্দিষ্ট করা একটি ভাল ধারণা। এই সীমাবদ্ধতাটি সিস্টেমকে বলে যে ব্যাটারি স্তরটি প্রকৃতপক্ষে বৃদ্ধি না হওয়া পর্যন্ত কাজটি না চালাতে। একইভাবে, Wi-Fi ব্যবহার করার জন্য সাধারণত মোবাইল ডেটার চেয়ে কম শক্তির প্রয়োজন হয়, তাই যদি আপনার টাস্কের একটি নেটওয়ার্ক সংযোগের প্রয়োজন হয় কিন্তু একটি মিটারবিহীন নেটওয়ার্ক উপলব্ধ না হওয়া পর্যন্ত অপেক্ষা করতে পারেন, তাহলে একটি NetworkType.UNMETERED সীমাবদ্ধতা সেট করা একটি ভাল ধারণা।

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

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

কাজগুলিকে ত্বরান্বিত হিসাবে চিহ্নিত করুন যখন সেগুলি সময়-সংবেদনশীল হয়৷

যদি একটি কাজ বিশেষভাবে জরুরী হয়, তাহলে আপনি এটিকে ত্বরান্বিত হিসাবে চিহ্নিত করতে পারেন৷ (JobScheduler কাজের জন্য, JobInfo.Builder.setExpedited(true) কল করুন।) এটি করা কাজটিকে বিভিন্ন উপায়ে অগ্রাধিকার দেয়। উদাহরণস্বরূপ, সিস্টেম সেই কাজগুলিকে অবিলম্বে চালায় যখন এটি করতে পারে, এবং পাওয়ার ম্যানেজমেন্টের সীমাবদ্ধতাগুলি দ্রুত কাজগুলিকে প্রভাবিত করার সম্ভাবনা কম।

এই কারণগুলির জন্য, আপনার যখন প্রয়োজন হবে তখনই একটি কাজকে ত্বরান্বিত হিসাবে চিহ্নিত করতে আপনার সতর্ক হওয়া উচিত। যেহেতু ত্বরান্বিত কাজগুলি কিছু সিস্টেমের দক্ষতাকে ওভাররাইড করতে পারে, ত্বরান্বিত কাজগুলি যদি সেভাবে চিহ্নিত না করা হয় তবে তাদের চেয়ে বেশি শক্তি সঞ্চয় করতে পারে।

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

কেন আপনার কাজ বন্ধ করা হয়েছে তা পরীক্ষা করুন

যদি আপনার কাজগুলি শেষ হওয়ার আগেই বন্ধ হয়ে যায়, তাহলে আপনি WorkInfo.getStopReason() কল করে কেন সেগুলি বন্ধ করা হয়েছে তা পরীক্ষা করতে পারেন। (JobScheduler কাজের জন্য, JobParameters.getStopReason() কল করুন কয়েকটি কারণে এটি করা গুরুত্বপূর্ণ। প্রথমত, অবশ্যই, আপনি আপনার কাজগুলি শেষ করতে চান। কেন আপনার কাজগুলি বন্ধ হয়ে গেছে তা খুঁজে বের করা আপনাকে একই রকম পরিস্থিতি এড়াতে সাহায্য করে। কিন্তু এছাড়াও , সিস্টেম রিসোর্স অত্যধিক ব্যবহার করে এমন আচরণের কারণে সিস্টেমটি কাজগুলি বন্ধ করে দিতে পারে আপনি অপ্রয়োজনীয়ভাবে ব্যাটারি বা নেটওয়ার্ক ব্যবহার করে আপনার অ্যাপটি খারাপ নাগরিক হতে চান না৷

উদাহরণস্বরূপ, যদি STOP_REASON_TIMEOUT কারণে আপনার কাজগুলি ঘন ঘন বন্ধ হয়ে যায়, তবে এমন একটি প্রান্তের ক্ষেত্রে হতে পারে যা কখনও কখনও আপনার কাজগুলিকে আপনার প্রত্যাশার চেয়ে অনেক বেশি সময় নিতে পারে৷

আমরা সুপারিশ করি যে আপনি আপনার অ্যানালিটিক্স ইঞ্জিন ব্যবহার করে আপনার অ্যাপ্লিকেশানের কাজগুলি বন্ধ হয়েছে কিনা এবং কী কারণে তা ট্র্যাক করুন৷

,

এই পৃষ্ঠাটি ভাল-আচরণ করা ব্যাকগ্রাউন্ড কাজগুলি সেট আপ করার জন্য কয়েকটি সেরা অনুশীলনের পরামর্শ দেয়৷ এই সর্বোত্তম অভ্যাসগুলি বিশেষভাবে ব্যাটারি খরচ হ্রাস করার লক্ষ্যে তৈরি করা হয়, তবে তারা নেটওয়ার্ক ব্যবহার হ্রাস করার মতো অন্যান্য উপায়েও ডিভাইসের কার্যকারিতা উন্নত করতে পারে।

সর্বোত্তম সীমাবদ্ধতা চয়ন করুন এবং কাজগুলি একত্রিত করুন

ডিভাইসে আপনার কাজের স্থান লোড কমাতে, সর্বোত্তম সীমাবদ্ধতাগুলি নির্দিষ্ট করা গুরুত্বপূর্ণ৷ (JobScheduler চাকরির জন্য, সীমাবদ্ধতার তালিকার জন্য JobInfo.Builder দেখুন।) একটি উদাহরণ নিতে, আপনি যদি নিশ্চিত করতে চান যে আপনার অ্যাপের ব্যাটারি শেষ হয়ে যাচ্ছে না, তাহলে RequiresCharging সীমাবদ্ধতা নির্দিষ্ট করা একটি ভাল ধারণা। এই সীমাবদ্ধতাটি সিস্টেমকে বলে যে ব্যাটারি স্তরটি প্রকৃতপক্ষে বৃদ্ধি না হওয়া পর্যন্ত কাজটি না চালাতে। একইভাবে, Wi-Fi ব্যবহার করার জন্য সাধারণত মোবাইল ডেটার চেয়ে কম শক্তির প্রয়োজন হয়, তাই যদি আপনার টাস্কের একটি নেটওয়ার্ক সংযোগের প্রয়োজন হয় কিন্তু একটি মিটারবিহীন নেটওয়ার্ক উপলব্ধ না হওয়া পর্যন্ত অপেক্ষা করতে পারেন, তাহলে একটি NetworkType.UNMETERED সীমাবদ্ধতা সেট করা একটি ভাল ধারণা।

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

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

কাজগুলিকে ত্বরান্বিত হিসাবে চিহ্নিত করুন যখন সেগুলি সময়-সংবেদনশীল হয়৷

যদি একটি কাজ বিশেষভাবে জরুরী হয়, তাহলে আপনি এটিকে ত্বরান্বিত হিসাবে চিহ্নিত করতে পারেন৷ (JobScheduler কাজের জন্য, JobInfo.Builder.setExpedited(true) কল করুন।) এটি করা কাজটিকে বিভিন্ন উপায়ে অগ্রাধিকার দেয়। উদাহরণস্বরূপ, সিস্টেম সেই কাজগুলিকে অবিলম্বে চালায় যখন এটি করতে পারে, এবং পাওয়ার ম্যানেজমেন্টের সীমাবদ্ধতাগুলি দ্রুত কাজগুলিকে প্রভাবিত করার সম্ভাবনা কম।

এই কারণগুলির জন্য, আপনার যখন প্রয়োজন হবে তখনই একটি কাজকে ত্বরান্বিত হিসাবে চিহ্নিত করতে আপনার সতর্ক হওয়া উচিত। যেহেতু ত্বরান্বিত কাজগুলি কিছু সিস্টেমের দক্ষতাকে ওভাররাইড করতে পারে, ত্বরান্বিত কাজগুলি যদি সেভাবে চিহ্নিত না করা হয় তবে তাদের চেয়ে বেশি শক্তি সঞ্চয় করতে পারে।

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

কেন আপনার কাজ বন্ধ করা হয়েছে তা পরীক্ষা করুন

যদি আপনার কাজগুলি শেষ হওয়ার আগেই বন্ধ হয়ে যায়, তাহলে আপনি WorkInfo.getStopReason() কল করে কেন সেগুলি বন্ধ করা হয়েছে তা পরীক্ষা করতে পারেন। (JobScheduler কাজের জন্য, JobParameters.getStopReason() কল করুন কয়েকটি কারণে এটি করা গুরুত্বপূর্ণ। প্রথমত, অবশ্যই, আপনি আপনার কাজগুলি শেষ করতে চান। কেন আপনার কাজগুলি বন্ধ হয়ে গেছে তা খুঁজে বের করা আপনাকে একই রকম পরিস্থিতি এড়াতে সাহায্য করে। কিন্তু এছাড়াও , সিস্টেম রিসোর্স অত্যধিক ব্যবহার করে এমন আচরণের কারণে সিস্টেমটি কাজগুলি বন্ধ করে দিতে পারে আপনি অপ্রয়োজনীয়ভাবে ব্যাটারি বা নেটওয়ার্ক ব্যবহার করে আপনার অ্যাপটি খারাপ নাগরিক হতে চান না৷

উদাহরণস্বরূপ, যদি STOP_REASON_TIMEOUT কারণে আপনার কাজগুলি ঘন ঘন বন্ধ হয়ে যায়, তবে এমন একটি প্রান্তের ক্ষেত্রে হতে পারে যা কখনও কখনও আপনার কাজগুলিকে আপনার প্রত্যাশার চেয়ে অনেক বেশি সময় নিতে পারে৷

আমরা সুপারিশ করি যে আপনি আপনার অ্যানালিটিক্স ইঞ্জিন ব্যবহার করে আপনার অ্যাপ্লিকেশানের কাজগুলি বন্ধ হয়েছে কিনা এবং কী কারণে তা ট্র্যাক করুন৷

,

এই পৃষ্ঠাটি ভাল-আচরণ করা ব্যাকগ্রাউন্ড কাজগুলি সেট আপ করার জন্য কয়েকটি সেরা অনুশীলনের পরামর্শ দেয়৷ এই সর্বোত্তম অভ্যাসগুলি বিশেষভাবে ব্যাটারি খরচ হ্রাস করার লক্ষ্যে তৈরি করা হয়, তবে তারা নেটওয়ার্ক ব্যবহার হ্রাস করার মতো অন্যান্য উপায়েও ডিভাইসের কার্যকারিতা উন্নত করতে পারে।

সর্বোত্তম সীমাবদ্ধতা চয়ন করুন এবং কাজগুলি একত্রিত করুন

ডিভাইসে আপনার কাজের স্থান লোড কমাতে, সর্বোত্তম সীমাবদ্ধতাগুলি নির্দিষ্ট করা গুরুত্বপূর্ণ৷ (JobScheduler চাকরির জন্য, সীমাবদ্ধতার তালিকার জন্য JobInfo.Builder দেখুন।) একটি উদাহরণ নিতে, আপনি যদি নিশ্চিত করতে চান যে আপনার অ্যাপের ব্যাটারি শেষ হয়ে যাচ্ছে না, তাহলে RequiresCharging সীমাবদ্ধতা নির্দিষ্ট করা একটি ভাল ধারণা। এই সীমাবদ্ধতাটি সিস্টেমকে বলে যে ব্যাটারি স্তরটি প্রকৃতপক্ষে বৃদ্ধি না হওয়া পর্যন্ত কাজটি না চালাতে। একইভাবে, Wi-Fi ব্যবহার করার জন্য সাধারণত মোবাইল ডেটার চেয়ে কম শক্তির প্রয়োজন হয়, তাই যদি আপনার টাস্কের একটি নেটওয়ার্ক সংযোগের প্রয়োজন হয় কিন্তু একটি মিটারবিহীন নেটওয়ার্ক উপলব্ধ না হওয়া পর্যন্ত অপেক্ষা করতে পারেন, তাহলে একটি NetworkType.UNMETERED সীমাবদ্ধতা সেট করা একটি ভাল ধারণা।

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

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

কাজগুলিকে ত্বরান্বিত হিসাবে চিহ্নিত করুন যখন সেগুলি সময়-সংবেদনশীল হয়৷

যদি একটি কাজ বিশেষভাবে জরুরী হয়, তাহলে আপনি এটিকে ত্বরান্বিত হিসাবে চিহ্নিত করতে পারেন৷ (JobScheduler কাজের জন্য, JobInfo.Builder.setExpedited(true) কল করুন।) এটি করা কাজটিকে বিভিন্ন উপায়ে অগ্রাধিকার দেয়। উদাহরণস্বরূপ, সিস্টেম সেই কাজগুলিকে অবিলম্বে চালায় যখন এটি করতে পারে, এবং পাওয়ার ম্যানেজমেন্টের সীমাবদ্ধতাগুলি দ্রুত কাজগুলিকে প্রভাবিত করার সম্ভাবনা কম।

এই কারণগুলির জন্য, আপনার যখন প্রয়োজন হবে তখনই একটি কাজকে ত্বরান্বিত হিসাবে চিহ্নিত করতে আপনার সতর্ক হওয়া উচিত। যেহেতু ত্বরান্বিত কাজগুলি কিছু সিস্টেমের দক্ষতাকে ওভাররাইড করতে পারে, ত্বরান্বিত কাজগুলি যদি সেভাবে চিহ্নিত না করা হয় তবে তাদের চেয়ে বেশি শক্তি সঞ্চয় করতে পারে।

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

কেন আপনার কাজ বন্ধ করা হয়েছে তা পরীক্ষা করুন

যদি আপনার কাজগুলি শেষ হওয়ার আগেই বন্ধ হয়ে যায়, তাহলে আপনি WorkInfo.getStopReason() কল করে কেন সেগুলি বন্ধ করা হয়েছে তা পরীক্ষা করতে পারেন। (JobScheduler কাজের জন্য, JobParameters.getStopReason() কল করুন কয়েকটি কারণে এটি করা গুরুত্বপূর্ণ। প্রথমত, অবশ্যই, আপনি আপনার কাজগুলি শেষ করতে চান। কেন আপনার কাজগুলি বন্ধ হয়ে গেছে তা খুঁজে বের করা আপনাকে একই রকম পরিস্থিতি এড়াতে সাহায্য করে। কিন্তু এছাড়াও , সিস্টেম রিসোর্স অত্যধিক ব্যবহার করে এমন আচরণের কারণে সিস্টেমটি কাজগুলি বন্ধ করে দিতে পারে আপনি অপ্রয়োজনীয়ভাবে ব্যাটারি বা নেটওয়ার্ক ব্যবহার করে আপনার অ্যাপটি খারাপ নাগরিক হতে চান না৷

উদাহরণস্বরূপ, যদি STOP_REASON_TIMEOUT কারণে আপনার কাজগুলি ঘন ঘন বন্ধ হয়ে যায়, তবে এমন একটি প্রান্তের ক্ষেত্রে হতে পারে যা কখনও কখনও আপনার কাজগুলিকে আপনার প্রত্যাশার চেয়ে অনেক বেশি সময় নিতে পারে৷

আমরা সুপারিশ করি যে আপনি আপনার অ্যানালিটিক্স ইঞ্জিন ব্যবহার করে আপনার অ্যাপ্লিকেশানের কাজগুলি বন্ধ হয়েছে কিনা এবং কী কারণে তা ট্র্যাক করুন৷

,

এই পৃষ্ঠাটি ভাল-আচরণ করা ব্যাকগ্রাউন্ড কাজগুলি সেট আপ করার জন্য কয়েকটি সেরা অনুশীলনের পরামর্শ দেয়৷ এই সর্বোত্তম অভ্যাসগুলি বিশেষভাবে ব্যাটারি খরচ হ্রাস করার লক্ষ্যে তৈরি করা হয়, তবে তারা নেটওয়ার্ক ব্যবহার হ্রাস করার মতো অন্যান্য উপায়েও ডিভাইসের কার্যকারিতা উন্নত করতে পারে।

সর্বোত্তম সীমাবদ্ধতা চয়ন করুন এবং কাজগুলি একত্রিত করুন

ডিভাইসে আপনার কাজের স্থান লোড কমাতে, সর্বোত্তম সীমাবদ্ধতাগুলি নির্দিষ্ট করা গুরুত্বপূর্ণ৷ (JobScheduler চাকরির জন্য, সীমাবদ্ধতার তালিকার জন্য JobInfo.Builder দেখুন।) একটি উদাহরণ নিতে, আপনি যদি নিশ্চিত করতে চান যে আপনার অ্যাপের ব্যাটারি শেষ হয়ে যাচ্ছে না, তাহলে RequiresCharging সীমাবদ্ধতা নির্দিষ্ট করা একটি ভাল ধারণা। এই সীমাবদ্ধতাটি সিস্টেমকে বলে যে ব্যাটারি স্তরটি প্রকৃতপক্ষে বৃদ্ধি না হওয়া পর্যন্ত কাজটি না চালাতে। একইভাবে, Wi-Fi ব্যবহার করার জন্য সাধারণত মোবাইল ডেটার চেয়ে কম শক্তির প্রয়োজন হয়, তাই যদি আপনার টাস্কের একটি নেটওয়ার্ক সংযোগের প্রয়োজন হয় কিন্তু একটি মিটারবিহীন নেটওয়ার্ক উপলব্ধ না হওয়া পর্যন্ত অপেক্ষা করতে পারেন, তাহলে একটি NetworkType.UNMETERED সীমাবদ্ধতা সেট করা একটি ভাল ধারণা।

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

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

কাজগুলিকে ত্বরান্বিত হিসাবে চিহ্নিত করুন যখন সেগুলি সময়-সংবেদনশীল হয়৷

যদি একটি কাজ বিশেষভাবে জরুরী হয়, তাহলে আপনি এটিকে ত্বরান্বিত হিসাবে চিহ্নিত করতে পারেন৷ (JobScheduler কাজের জন্য, JobInfo.Builder.setExpedited(true) কল করুন।) এটি করা কাজটিকে বিভিন্ন উপায়ে অগ্রাধিকার দেয়। উদাহরণস্বরূপ, সিস্টেম সেই কাজগুলিকে অবিলম্বে চালায় যখন এটি করতে পারে, এবং পাওয়ার ম্যানেজমেন্টের সীমাবদ্ধতাগুলি দ্রুত কাজগুলিকে প্রভাবিত করার সম্ভাবনা কম।

এই কারণগুলির জন্য, আপনার যখন প্রয়োজন হবে তখনই একটি কাজকে ত্বরান্বিত হিসাবে চিহ্নিত করতে আপনার সতর্ক হওয়া উচিত। যেহেতু ত্বরান্বিত কাজগুলি কিছু সিস্টেমের দক্ষতাকে ওভাররাইড করতে পারে, ত্বরান্বিত কাজগুলি যদি সেভাবে চিহ্নিত না করা হয় তবে তাদের চেয়ে বেশি শক্তি সঞ্চয় করতে পারে।

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

কেন আপনার কাজ বন্ধ করা হয়েছে তা পরীক্ষা করুন

যদি আপনার কাজগুলি শেষ হওয়ার আগেই বন্ধ হয়ে যায়, তাহলে আপনি WorkInfo.getStopReason() কল করে কেন সেগুলি বন্ধ করা হয়েছে তা পরীক্ষা করতে পারেন। (JobScheduler কাজের জন্য, JobParameters.getStopReason() কল করুন কয়েকটি কারণে এটি করা গুরুত্বপূর্ণ। প্রথমত, অবশ্যই, আপনি আপনার কাজগুলি শেষ করতে চান। কেন আপনার কাজগুলি বন্ধ হয়ে গেছে তা খুঁজে বের করা আপনাকে একই রকম পরিস্থিতি এড়াতে সাহায্য করে। কিন্তু এছাড়াও , সিস্টেম রিসোর্স অত্যধিক ব্যবহার করে এমন আচরণের কারণে সিস্টেমটি কাজগুলি বন্ধ করে দিতে পারে আপনি অপ্রয়োজনীয়ভাবে ব্যাটারি বা নেটওয়ার্ক ব্যবহার করে আপনার অ্যাপটি খারাপ নাগরিক হতে চান না৷

উদাহরণস্বরূপ, যদি STOP_REASON_TIMEOUT কারণে আপনার কাজগুলি ঘন ঘন বন্ধ হয়ে যায়, তবে এমন একটি প্রান্তের ক্ষেত্রে হতে পারে যা কখনও কখনও আপনার কাজগুলিকে আপনার প্রত্যাশার চেয়ে অনেক বেশি সময় নিতে পারে৷

আমরা সুপারিশ করি যে আপনি আপনার অ্যানালিটিক্স ইঞ্জিন ব্যবহার করে আপনার অ্যাপ্লিকেশানের কাজগুলি বন্ধ হয়েছে কিনা এবং কী কারণে তা ট্র্যাক করুন৷