SDL中文论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 4110|回复: 1
打印 上一主题 下一主题

[Discuss] app:后台、前台、终止

[复制链接]

149

主题

331

帖子

2445

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2445
跳转到指定楼层
楼主
发表于 2016-5-12 09:35:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 ancientcc 于 2016-5-12 09:51 编辑

事件iOS/触发线程Android/触发线程Windows/触发线程
SDL_APP_WILLENTERBACKGROUNDapplicationWillResignActive/非Rose线程onPause/UI线程No
SDL_APP_DIDENTERBACKGROUNDapplicationDidEnterBackground/非Rose线程onPause/UI线程No
SDL_APP_WILLENTERFOREGROUNDapplicationWillEnterForeground/非Rose线程onResume/UI线程No
SDL_APP_DIDENTERFOREGROUNDapplicationDidBecomeActive/非Rose线程onResume/UI线程No
SDL_APP_TERMINATINGapplicationWillTerminate/非Rose线程onDestroy/UI线程WM_CLOSE/主线程

这五个事件不被放在SDL事件队列,直接在触发线程执行。
考虑到SDL_QUIT和SDL_APP_TERMINATING是同一作用,不再使用SDL_QUIT。

app进入后台后,SDLThread要被暂停,events::pump()将不被调用,意味着app将不再能处理事件。以下是一次Pause到Resume过程中积累的事件快照。(排列只是按简单归类,不按收到次序)
类型个数
512[SDL_WINDOWEVENT]3
1024[SDL_MOUSEMOTION]1
32769[TIMER_EVENT]15551

注:最后一个收到的事件类型是SDL_WINDOWEVENT

在后台时,SDL直接忽略掉这些事件。那忽略掉对App有何影响?我们以TIMER_EVENT为例,首先要知道的是,不管App有没有处理TIMER_EVENT,都不会影响定时器回调的返回值,即不处理TIMER_EVENT不会中断定时器的扩展出下一个定时,具体参考timer.cpp中的timer_callback。
回复

使用道具 举报

149

主题

331

帖子

2445

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2445
沙发
 楼主| 发表于 2016-5-12 09:48:53 | 只看该作者

Android

SDLThead是什么时候开始不能处理事件?我不能确定具体是怎么时候,大概是在UI线程执行onPause时候。
SDLThead是什么时候开始能处理事件?我不能确定是具体是怎么时候,大概在UI线程执行onResume时候。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|丽谷软件|libsdl.cn

GMT+8, 2025-5-2 00:41 , Processed in 0.045102 second(s), 19 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表