Google は、黒人コミュニティに対する人種平等の促進に取り組んでいます。取り組みを見る

ガレージモード

車両にアイドル時間の期間を提供するために、ガレージモードでの仕事という目を覚ましので、システムを維持しjobschedulerのがで制約怠惰を実行することができます。

ガレージモードとは何ですか?

電話などの接続されたデバイスでは、ユーザーはシステムを利用して、デバイスが安定し、最新で、最適化されていることを確認します。その状態を達成するために、Androidプラットフォームを提供してアイドル時間のユーザーがデバイスと相互作用しないとき、アプリケーションがタスクを実行することができ、その間のウィンドウを。ユーザーが拡張時間(60分以上)のためにそれに触れていない場合、電話機は、アイドル状態であるとみなされ、画面がオフになっています。車が使用されていない携帯電話とは異なり、それはそれは車が何も持っていないことを意味し、オフになっているアイドル時間の窓を。ガレージモードは、車のアイドル時間を確保します。

ユーザーが車の電源を切ると、システムはガレージモードに入ります。車がガレージモードになっている間、システムの電源がオンになり、ディスプレイがオフになり、JobSchedulerキュー内のアイドル状態のジョブが実行されます。ガレージモードを実装するには、参照デバイスの実装ガイドライン以下を。

デバイス実装ガイドライン

車両をオフにするときにガレージモードをアクティブにするために、車両HAL(VHAL)を送信する必要がありAP_POWER_STATE_REQ状態でSHUTDOWN_PREPAREにパラメータセットとSHUTDOWN_ONLY又はCAN_SLEEP

状態のためSHUTDOWN_PREPARE有効であるために、VHALのための2つのパラメータ(状態と追加パラメータ)を指定する必要がありAP_POWER_STATE_REQコマンド。これは、中にスケジュールされたジョブを検出ガレージモード、入力するデバイス可能jobschedulerのとジョブが完了するまで続行のいずれかから中断またはシャットダウンにシステムを防止します。

デバイスの実装はどのようにAndroidフレームワークに接続しますか?

ガレージモードの場合、フレームワークはVHALに、必要な期間を超えるか、すべてのジョブが実行されるまでシャットダウン時間を延長するように要求します。その時点で、システムはシャットダウンされます。 CDDで定義されている特定の状況下では、デバイスの実装によりシステムをより早くシャットダウンできます。 (Androidの参照、Androidの互換性の要件の詳細については互換性の定義文書(CDD)をVHALはガレージモードが完了する前にシステムをシャットダウンする必要があります。)、VHALを発行することができSHUTDOWN_PREPAREするパラメータセットでSHUTDOWN_IMMEDIATELYまたはSLEEP_IMMEDIATELY 。システムの稼働を維持するために必要なリソースが利用できない場合、デバイスの実装は、通常、のみ、特定の状況下で、これを使用することができます。たとえば、バッテリー容量が不足している場合。

ガレージモード

アプリケーション開発者はガレージモードでどのように作業しますか?

アプリケーションとサービスは、ガレージモードと直接対話しません。代わりに、中にスケジュールジョブをアプリ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. ガレージモードが開始されることを示す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