गैराज मोड

वाहनों में निष्क्रिय समय की अवधि प्रदान करने के लिए, गैराज मोड सिस्टम को सक्रिय रखता है ताकि JobScheduler में निष्क्रियता से बाधित कार्यों को निष्पादित किया जा सके।

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

फ़ोन जैसे कनेक्टेड डिवाइस पर, उपयोगकर्ता यह सुनिश्चित करने के लिए सिस्टम पर भरोसा करते हैं कि डिवाइस स्थिर, अद्यतित और अनुकूलित हैं। उस स्थिति को प्राप्त करने के लिए, एंड्रॉइड प्लेटफ़ॉर्म एक निष्क्रिय समय विंडो प्रदान करता है जिसके दौरान जब उपयोगकर्ता डिवाइस के साथ इंटरैक्ट नहीं करता है तो ऐप्स कार्य कर सकते हैं। किसी फ़ोन को तब निष्क्रिय माना जाता है जब उपयोगकर्ता उसे लंबे समय (60 मिनट या अधिक) तक नहीं छूता है और स्क्रीन बंद हो जाती है। फ़ोन के विपरीत, जब कार का उपयोग नहीं किया जा रहा होता है, तो उसे बंद कर दिया जाता है, जिसका अर्थ है कि कार में कोई निष्क्रिय समय विंडो नहीं है। गैराज मोड कार में निष्क्रिय समय सुनिश्चित करता है।

जब उपयोगकर्ता द्वारा कार बंद कर दी जाती है, तो सिस्टम गैराज मोड में प्रवेश कर जाता है। जब एक कार गैराज मोड में होती है, तो सिस्टम चालू होता है, डिस्प्ले बंद होता है, और JobScheduler कतार में निष्क्रिय कार्य निष्पादित होते हैं। गैराज मोड लागू करने के लिए, डिवाइस कार्यान्वयन दिशानिर्देश देखें।

डिवाइस कार्यान्वयन दिशानिर्देश

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

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

डिवाइस कार्यान्वयन एंड्रॉइड फ्रेमवर्क से कैसे जुड़ते हैं?

गैराज मोड के लिए, फ्रेमवर्क वीएचएएल से शटडाउन समय को तब तक बढ़ाने का अनुरोध करता है जब तक कि आवश्यक अवधि पार नहीं हो जाती है या सभी कार्य निष्पादित नहीं हो जाते हैं, जिस समय सिस्टम बंद हो जाता है। सीडीडी में परिभाषित विशिष्ट परिस्थितियों में, डिवाइस कार्यान्वयन सिस्टम को जल्दी बंद कर सकता है। एंड्रॉइड संगतता आवश्यकताओं के विवरण के लिए, एंड्रॉइड संगतता परिभाषा दस्तावेज़ (सीडीडी) देखें।

यदि गैराज मोड पूरा होने से पहले वीएचएएल को सिस्टम बंद करना होगा, तो वीएचएएल 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. यह इंगित करने के लिए लॉगकैट आउटपुट की समीक्षा करें कि सही पावर स्थिति दर्ज की गई है:
    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