गराज मोड

गाड़ियों में इंजन के बंद रहने के दौरान, गैराज मोड सिस्टम को चालू रखता है, ताकि JobScheduler में इंजन के बंद रहने की वजह से रुकी हुई प्रोसेस को पूरा किया जा सके.

गैराज मोड क्या है?

फ़ोन जैसे कनेक्टेड डिवाइसों पर, उपयोगकर्ता सिस्टम पर भरोसा करते हैं, ताकि यह पक्का किया जा सके कि डिवाइस ठीक से काम कर रहे हैं, अप-टू-डेट हैं, और ऑप्टिमाइज़ किए गए हैं. इस स्थिति को हासिल करने के लिए, Android प्लैटफ़ॉर्म एक इडल टाइम विंडो उपलब्ध कराता है. इस दौरान, ऐप्लिकेशन ऐसे टास्क कर सकते हैं जिनमें उपयोगकर्ता का डिवाइस इस्तेमाल करना ज़रूरी नहीं होता. जब कोई उपयोगकर्ता किसी फ़ोन को 60 मिनट या उससे ज़्यादा समय तक इस्तेमाल नहीं करता और उसकी स्क्रीन बंद हो जाती है, तो उसे इडल माना जाता है. फ़ोन के उलट, जब कार का इस्तेमाल नहीं किया जा रहा होता है, तो उसे बंद कर दिया जाता है. इसका मतलब है कि कार के लिए इडल टाइम वाली विंडो नहीं होती. गैराज मोड की मदद से, यह पक्का किया जा सकता है कि कार में कोई भी डिवाइस इस्तेमाल में न हो.

जब कोई उपयोगकर्ता कार बंद करता है, तो सिस्टम गैराज मोड में चला जाता है. जब कोई कार, गैराज मोड में होती है, तब सिस्टम चालू रहता है, डिसप्ले बंद रहता है, और JobScheduler सूची में मौजूद वे काम पूरे हो जाते हैं जो कुछ समय से किए नहीं जा रहे थे. गैराज मोड लागू करने के लिए, डिवाइस पर लागू करने के दिशा-निर्देश देखें.

डिवाइस पर लागू करने के दिशा-निर्देश

गाड़ी बंद करते समय, गैराज मोड चालू करने के लिए, वाहन के एचएएल (वीएचएएल) को SHUTDOWN_PREPARE के स्टेटस के साथ AP_POWER_STATE_REQ भेजना होगा. साथ ही, पैरामीटर को SHUTDOWN_ONLY या CAN_SLEEP पर सेट करना होगा.

SHUTDOWN_PREPARE स्टेटस के लागू होने के लिए, VHAL को AP_POWER_STATE_REQ कमांड के लिए दो पैरामीटर (स्टेटस और अतिरिक्त पैरामीटर) तय करने होंगे. इससे डिवाइस, गैरेज मोड में चला जाता है. यह मोड, JobScheduler में शेड्यूल किए गए टास्क का पता लगाता है. साथ ही, टास्क पूरे होने तक सिस्टम को निलंबित या बंद होने से रोकता है.

डिवाइस को लागू करने की सुविधाएं, Android फ़्रेमवर्क से कैसे कनेक्ट होती हैं?

गैरेज मोड के लिए, फ़्रेमवर्क VHAL से, बंद होने का समय बढ़ाने का अनुरोध करता है. ऐसा तब तक किया जाता है, जब तक ज़रूरी समय खत्म नहीं हो जाता या सभी जॉब पूरे नहीं हो जाते. इसके बाद, सिस्टम बंद हो जाता है. सीडीडी में बताई गई कुछ खास परिस्थितियों में, डिवाइस लागू करने की प्रोसेस, सिस्टम को जल्दी बंद कर सकती है. Android के साथ काम करने की ज़रूरी शर्तों के बारे में जानकारी पाने के लिए, Android का कंपैटबिलिटी डेफ़िनिशन डॉक्यूमेंट (सीडीडी) देखें.

अगर VHAL को गैरेज मोड पूरा होने से पहले सिस्टम बंद करना है, तो VHAL, SHUTDOWN_PREPARE को जारी कर सकता है. इसके लिए, पैरामीटर को SHUTDOWN_IMMEDIATELY या SLEEP_IMMEDIATELY पर सेट किया जाना चाहिए. डिवाइस के सिर्फ़ कुछ खास मामलों में, इस सुविधा का इस्तेमाल किया जा सकता है. आम तौर पर, ऐसा तब किया जाता है, जब सिस्टम को चालू रखने के लिए ज़रूरी संसाधन उपलब्ध न हों. उदाहरण के लिए, जब बैटरी की क्षमता कम हो.

गैरेज मोड

पहली इमेज. गैरेज मोड का फ़्लो

ऐप्लिकेशन डेवलपर, Garage Mode के साथ कैसे काम करते हैं?

ऐप्लिकेशन और सेवाएं, सीधे तौर पर गैरेज मोड के साथ इंटरैक्ट नहीं करती हैं. इसके बजाय, ऐप्लिकेशन 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. Garage Mode के चालू होने की जानकारी देने वाले logcat आउटपुट की समीक्षा करने के लिए:
    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. यह पता लगाने के लिए कि गैरेज मोड पूरा हो गया है (रद्द कर दिया गया है या पूरा हो गया है), logcat आउटपुट देखें:
    [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