1.何时发生UserActivity
如果我们在Settings中设置sleep时间为15s,那么15秒内如果没有任何操作,屏幕就会熄灭(当然,没有WakeLock未被释放是前提)。如果在这个时间内用户有操作:touch屏幕或者按下菜单键、返回键等,那么这时就会调用PowerManagerService的UserActivity方法,这样会重置那个timeout的时间。
这里有三个重要的时间,参考下图:
首先是screenOffTimeout,一般地,就是设置中的sleep时间,用户可选,有15s、30s、1min、2mins等。device admin和window manager可以override这个时间(PowerManager提供了相应的接口),但是override有要求:必须大于10s,并小于设置中的15s,否则是无意义的,如果这里override了,那么这个就是最终的结果,如果没有override,那么以setting中的为准。在我们后来的讨论中都假设用户选择了15s,而且没有override,所以screenOffTimeout=15s。
其次是screenDimDuration,它代表屏幕亮度处于dim的持续时间(屏幕的变化:bright--dim--off),它是0.2*15s=3s。如果用户在settings中设置的不是15s,而是1min,那么1min*0.2=12s,当大于7s时,取7s。
最后是screenButtonLightDuration,它代表button持续点亮的时间,是0.3*15s=4.5s,它也有最大值:8s。
好了,假设在屏幕点亮状态下,我按下了menu键会怎么样呢?会触发UserActivity,同时User activity event type是USER_ACTIVITY_EVENT_BUTTON,那么从按下menu键开始后,button处于点亮状态,screen处于bright首先button的背光持续4.5s点亮,之后熄灭,经过7.5s后screen由bright变为dim,持续3s后,screen off。
j