গ্যারেজ মোড

যানবাহনে অলস সময় দেওয়ার জন্য, গ্যারেজ মোড সিস্টেমকে জাগ্রত রাখে যাতে অলসতার সাথে সীমাবদ্ধ JobScheduler কাজগুলি কার্যকর করা যায়।

গ্যারেজ মোড কি?

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

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

ডিভাইস বাস্তবায়ন নির্দেশিকা

গ্যারেজ মোড সক্রিয় করতে, গাড়িটি বন্ধ করার সময়, যানবাহন HAL (VHAL) কে অবশ্যই SHUTDOWN_PREPARE রাজ্যের সাথে AP_POWER_STATE_REQ পাঠাতে হবে যাতে প্যারামিটারটি SHUTDOWN_ONLY বা CAN_SLEEP সেট করা হয়।

স্টেট SHUTDOWN_PREPARE কার্যকর হওয়ার জন্য, VHAL কে AP_POWER_STATE_REQ কমান্ডের জন্য দুটি প্যারামিটার (স্টেট এবং অতিরিক্ত প্যারামিটার) নির্দিষ্ট করতে হবে। এটি ডিভাইসটিকে গ্যারেজ মোডে প্রবেশ করতে সক্ষম করে, যা JobScheduler এ নির্ধারিত কাজগুলি সনাক্ত করে এবং কাজগুলি সম্পূর্ণ না হওয়া পর্যন্ত সিস্টেমটিকে সাসপেন্ড বা শাট ডাউন হতে বাধা দেয়।

ডিভাইস বাস্তবায়ন কিভাবে অ্যান্ড্রয়েড ফ্রেমওয়ার্কের সাথে সংযোগ করে?

গ্যারেজ মোডের জন্য, ফ্রেমওয়ার্ক VHAL-কে শাটডাউন সময় বাড়ানোর জন্য অনুরোধ করে যতক্ষণ না হয় প্রয়োজনীয় সময়সীমা অতিক্রম করা হয় বা সমস্ত কাজ কার্যকর করা না হয়, সেই সময়ে সিস্টেমটি বন্ধ হয়ে যায়। CDD-তে সংজ্ঞায়িত নির্দিষ্ট পরিস্থিতিতে, ডিভাইস বাস্তবায়ন শীঘ্রই সিস্টেমটি বন্ধ করতে পারে। অ্যান্ড্রয়েড সামঞ্জস্যের প্রয়োজনীয়তার বিশদ বিবরণের জন্য, অ্যান্ড্রয়েড সামঞ্জস্যের সংজ্ঞা নথি (CDD) দেখুন।

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

গ্যারেজ মোড

চিত্র 1. গ্যারেজ মোড প্রবাহ

কিভাবে অ্যাপ ডেভেলপাররা গ্যারেজ মোডের সাথে কাজ করে?

অ্যাপ্লিকেশান এবং পরিষেবাগুলি সরাসরি গ্যারেজ মোডের সাথে যোগাযোগ করে না৷ পরিবর্তে, অ্যাপগুলি JobScheduler এ কাজের সময়সূচী করে। অলসতার দ্বারা সীমাবদ্ধ সেই কাজগুলি গ্যারেজ মোডের সময় কার্যকর করা হয়।

নিচের কোডটি দেখায় কিভাবে গ্যারেজ মোড চলাকালীন কাজের সময় নির্ধারণ করতে হয়:

public class MyGarageModeJob extends JobService { ... }

Context context = ...;
int jobId = ...;

ComponentName myGarageModeJobName = new componentName(context,
                                                      MyGarageModeJob.class);

JobInfo.Builder infoBuilder = new JobInfo.Builder(jobId, myGarageModeJobName)
                    .setRequiresDeviceIdle(true);

// Example of an optional constraint:
infoBuilder.setRequiredNetworkType(NetworkType.NETWORK_TYPE_UNMETERED);

JobScheduler jobScheduler = (JobScheduler) context
                    .getSystemService(Context.JOB_SCHEDULER_SERVICE);

jobScheduler.schedule(infoBuilder.build());

ডিবাগ গ্যারেজ মোড

গ্যারেজ মোড ডিবাগ করতে:
  1. গ্যারেজ মোডের সাথে প্রাসঙ্গিক লগিং বিভাগগুলি সক্ষম করতে:
    adb shell stop
    adb shell setprop log.tag.GarageMode VERBOSE
    adb shell setprop log.tag.Finsky VERBOSE
    adb shell setprop log.tag.CAR.POWER VERBOSE
    adb shell setprop log.tag.JobScheduler.Connectivity VERBOSE
    adb shell start
    
  2. গ্যারেজ মোড শুরু হচ্ছে তা নির্দেশ করতে লগক্যাট আউটপুট পর্যালোচনা করতে:
    GarageMode: [Controller]: CPM state changed to SHUTDOWN_PREPARE
    GarageMode: [GarageMode]: Entering GarageMode
    GarageMode: [Controller]: Sending broadcast with action: com.android.server.jobscheduler.GARAGE_MODE_ON
    
  3. গ্যারেজ মোড শেষ হয়েছে (বাতিল বা সম্পূর্ণ) নির্দেশ করার জন্য লগক্যাট আউটপুট নির্ধারণ করতে:
    [GarageMode]: GarageMode was canceled
    
    বা
    [GarageMode]: GarageMode completed normally
    

    গ্যারেজ মোড উপরে বর্ণিত গাড়ির শক্তি অবস্থার উপর নির্ভর করে।

  4. logcat আউটপুট পর্যালোচনা করুন সঠিক পাওয়ার স্টেটগুলি প্রবেশ করানো হয়েছে তা নির্দেশ করতে:
    CAR.POWER: starting shutdown prepare without Garage Mode
    GarageMode: [Controller]: CPM state changed to SHUTDOWN_PREPARE
    GarageMode: [GarageMode]: Entering GarageMode
    CAR.POWER: send shutdown prepare
    CAR.POWER: setPowerState=SHUTDOWN_PREPARE(7) param=0