Android 低电量关机原理 详解

首先电量过低时,healthd会触发batteryService类中的shutdownIfNoPowerLocked方法:
private void shutdownIfNoPowerLocked() {
    // shut down gracefully if our battery is critically low and we are not powered.
    // wait until the system has booted before attempting to display the shutdown dialog.
    if (mBatteryProps.batteryLevel == 0 && !isPoweredLocked(BatteryManager.BATTERY_PLUGGED_ANY)) {
        mHandler.post(new Runnable() {
            @Override
            public void run() {
                if (mActivityManagerInternal.isSystemReady()) {
                    Intent intent = new Intent(Intent.ACTION_REQUEST_SHUTDOWN);
                    intent.putExtra(Intent.EXTRA_KEY_CONFIRM, false);
                    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    mContext.startActivityAsUser(intent, UserHandle.CURRENT);
                }
            }
        });
    }
}

该方法会跳转到ShutdownActivity中:
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    Intent intent = getIntent();
    mReboot = Intent.ACTION_REBOOT.equals(intent.getAction());
    mConfirm = intent.getBooleanExtra(Intent.EXTRA_KEY_CONFIRM, false);
    mUserRequested = intent.getBooleanExtra(Intent.EXTRA_USER_REQUESTED_SHUTDOWN, false);
    Slog.i(TAG, "onCreate(): confirm=" + mConfirm);

    Thread thr = new Thread("ShutdownActivity") {
        @Override
        public void run() {
            IPowerManager pm = IPowerManager.Stub.asInterface(
                    ServiceManager.getService(Context.POWER_SERVICE));
            try {
            	//这里会执行管理或者重启操作
                if (mReboot) {
                    pm.reboot(mConfirm, null, false);
                } else {
                    pm.shutdown(mConfirm,
                                mUserRequested ? PowerManager.SHUTDOWN_USER_REQUESTED : null,
                                false);
                }
            } catch (RemoteException e) {
            }
        }
    };
    thr.start();
    finish();
    // Wait for us to tell the power manager to shutdown.
    try {
        thr.join();
    } catch (InterruptedException e) {
    }
}

参考文档:
低电量管理-framework层-详解

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android 低电量提示是一种系统提醒机制,旨在及时告知用户电池电量低于预设值,以便用户能够及时采取措施,例如充电或限制使用来延长电池寿命。 当 Android 设备的电池电量降至较低水平时,通常会触发低电量提示。这通常是通过一个小弹窗或通知栏上的图标来实现的。该提醒会直接显示当前电池电量的百分比,让用户了解电量的实际情况。同时,还会提供各种操作建议来有效节省电量,例如界面亮度调低、关闭不必要的背景应用程序和无线通信等。这些措施可以延长电池寿命,让用户在没有电源插座的情况下更长时间地使用设备。 Android 系统低电量提醒一般会设置一个默认电池电量阈值,例如 20%。当设备电量低于这个阈值时,系统会自动触发提醒,但用户也可以自行调整这个阈值,以便更早或更晚接收到低电量提醒。 除了系统提醒外,应用程序也可以通过监听电池电量的变化来提醒用户低电量状态。这个功能可以通过使用 Android 系统提供的电量状态广播来实现。应用程序可以注册这个广播,以便在电池电量变化时收到通知,并做出相应的提示。 总而言之,Android 低电量提示是一项非常有用的功能,它通过提醒用户电池电量不足,帮助用户及时采取措施来延长设备的电池寿命。同时,应用程序也可以利用这个功能来更好地管理自身的电池使用情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值