在流程中首先判断当前状态是否为,如果是则置位标志,如果不是则取消流程;然后遍历浅度休眠链表,从链表头部到尾部依次调用各节点的()函数,执行完后判断当前状态是否为,如果是则释放,当前系统中如果只存在这个有效锁,则会在()里面启动 深度休眠线程,如果还有其他其他则保持当前状态 。
[cpp] view plain copyprint ?
e(*work){*pos;;=0;(&);(&,);if(state==)//清除浅度休眠完成标志state&=~;=1;re(&,);if(abort){if(&)(":abort,state%d\n",state);;}if(&)(":\n");//反向遍历浅度休眠链表并执行其中所有函数//执行顺序根据优先等级而定,等级越高越先执行(pos,&rs,link)if(pos->!=NULL)pos->(pos);if(&)(":done\n");abort:(&);}
static void late_resume(struct work_struct *work){struct early_suspend *pos;unsigned long irqflags;int abort = 0;mutex_lock(&early_suspend_lock);spin_lock_irqsave(&state_lock, irqflags);if (state == SUSPENDED)// 清除浅度休眠完成标志state &= ~SUSPENDED;elseabort = 1;spin_unlock_irqrestore(&state_lock, irqflags);if (abort) {if (debug_mask & DEBUG_SUSPEND)pr_info("late_resume: abort, state %d\n", state);goto abort;}if (debug_mask & DEBUG_SUSPEND)pr_info("late_resume: call handlers\n");// 反向遍历浅度休眠链表并执行其中所有resume函数// 执行顺序根据优先等级而定,等级越高越先执行list_for_each_entry_reverse(pos, &early_suspend_handlers, link)if (pos->resume != NULL)pos->resume(pos);if (debug_mask & DEBUG_SUSPEND)pr_info("late_resume: done\n");abort:mutex_unlock(&early_suspend_lock);}
在流程中同样首先判断当前状态是否为,如果是则清除标志,然后反向遍历浅度休眠链表,按照优先等级从高到低的顺序执行节点的()函数 。
[cpp] view plain copyprint ?
sync(*work){(&);();(&);}
static void early_sys_sync(struct work_struct *work){wake_lock(&sys_sync_wake_lock);sys_sync();wake_unlock(&sys_sync_wake_lock);}
内核专门为缓存同步建立了一个线程,同时还创建了防止在同步缓存时系统进入深度休眠 。
- 有米Android SDK开发者文档
- 弘辽科技:社区团购“二线玩家”分野
- Android Studio安装成功 启动失败 提示重装的问题解决方法 Miss
- Android.mk android驱动学习1-驱动开发流程
- Android Studio-手把手教你基于SQLLITE实现登录注册功能
- Android驱动程序编写过程记录
- 二、正负样本不平衡处理方法总结
- 高考发挥超常,考了个二本
- 装刀凯第二季可以在樱花动漫上观看吗
- 二人世界在哪儿在线观看