解析自动休眠--->实现自动关机


从Application上往下跟,解析自动休眠的实现策略

Application层

Settings----Display----Sleep

这里是超时设置的地方。

文件目录:packages/apps/Settings/src/com/android/settings/DisplaySettings.java

这里比较简单:

onCreate()

{

mScreenTimeoutPreference = (ListPreference)findPreference(KEY_SCREEN_TIMEOUT);

        final long currentTimeout =Settings.System.getLong(resolver, SCREEN_OFF_TIMEOUT,

                FALLBACK_SCREEN_TIMEOUT_VALUE);

        mScreenTimeoutPreference.setValue(String.valueOf(currentTimeout));

       mScreenTimeoutPreference.setOnPreferenceChangeListener(this);

       disableUnusableTimeouts(mScreenTimeoutPreference);

       updateTimeoutPreferenceDescription(currentTimeout);

}

……….

@Override

    publicboolean onPreferenceChange(Preference preference, Object objValue) {

        finalString key = preference.getKey();

        if(KEY_SCREEN_TIMEOUT.equals(key)) {

            try {

               int value = Integer.parseInt((String) objValue);

               Settings.System.putInt(getContentResolver(), SCREEN_OFF_TIMEOUT, value);

               updateTimeoutPreferenceDescription(value);

            }catch (NumberFormatException e) {

               Log.e(TAG, "could not persist screen timeout setting", e);

            }

        }

}

Settings里头,只是将当前的数值保存在数据库里头,这意味着默认值可以在SettingsProvider中被设置,这是比较正统的做法。同时,也意味着会有一个Observer。

---------------------------------------------------------------------------------------------------------------------------

Framework层

有以下几处用到了这个SCREEN_OFF_TIMEOUT

1.      frameworks/base/services/core/java/com/android/server/power/PowerManagerService.java

2.      frameworks/base/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java

3.      frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java

4.      frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java

   这几处要一个一个查。具体是什么作用

从简单的开始查,基本上可以肯定DatabaseHelper.java只是初始化,读取默认参数。去看看。

一、DatabaseHelper.java

private voidloadSystemSettings(SQLiteDatabase db) {

       SQLiteStatement stmt = null;

       try {

           ……...

        //add for factory as ro.rk.screenoff_time

           loadSetting(stmt, Settings.System.SCREEN_OFF_TIMEOUT,

                    SystemProperties.getInt("ro.rk.screenoff_time",mContext.getResources().getInteger(R.integer.def_screen_off_timeout)));

                     ………..

            }

这里读取ro.rk.screenoff_time读取数据,默认数值保存在def_screen_off_timeout中。只是初始化数值。

SCREEN_OFF_TIMEOUT这个关键字还出现upgradeScreenTimeoutFromNever中,但这里只是数据库更新时的操作,没有更多的意义。

 

二、PhoneWindowManager.java第二个文件是这个。

            特地说明下这个类:PhoneWindowManager.java继承自WindowManagePolicy.java

            WindowManagePolicy.java是做什么的呢?这里头有一大堆lw li t

            --------接口类,提供了WindowManager的所有UI定制行为。在WindowManager启动的时候被实例化,允许定制window层级,制定window类型,key事件派发,布局。

WindowManagePolicy.java提供了与系统窗口管理的深层交互。在这个interface中的一些方法会被许多被多重限制的context调用。这里怎么理解呢?多重限制。可以理解成这是些被很多lock限制的context。这些函数会用一些 后缀 来判别被调用时持有了哪些lock。如果没有后缀。那就意味着函数可能是被window manager 主线程或 其他调用windowmanager的线程。

                   后缀:Ti--------Thread input;   Tq----------Thread Queue;     Lw---------------lock mainwindowmanager;         Li-----------------Lock input thread

同时,在PhoneWindowManager中,新增后缀Lp--------Lock phone window manager

这里的限制&

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值