go mobile 得生命周期事件
生命周期事件,就是状态从一个阶段切换成另外一个状态时触发的事件。所以我们可以看到 lifecycle.Event 的定义如下:
生命周期一共有下面四个阶段:
lifecycle.StageDead, lifecycle.StageAlive, lifecycle.StageVisible, lifecycle.StageFocused, 具体定义如下图:
一个可以用来分析各个事件先后顺序的代码:
// +build darwin linux
package main
import "log"
import "golang.org/x/mobile/app"
import "golang.org/x/mobile/event/lifecycle"
import "golang.org/x/mobile/event/paint"
func main() {
app.Main(func(a app.App) {
// each posible lyfecycle stage
for e := range a.Events() {
// when an events come's
switch e := a.Filter(e).(type) {
case lifecycle.Event:
log.Println(e.From, "->", e.To)
case paint.Event:
// if it's a paint event, log it
if e.External {
log.Println("paint external")
} else {
log.Println("paint internal")
}
a.Publish()
}
}
})
}
源码来自: https://dev.snip2code.com/Snippet/789859/Simple-App-for-GoMobile--that-logs-lifec
在Mac笔记本上的业务过程如下图:
在Android 下试验的 生命周期流程如下:
已知的这些事件转换过程如下:
从上面可以看到, android 下 我们应用启动时,直接从 StageDead 到了 StageFocused,我们就没法在 StageVisible 和 StageAlive 做一些代码了么?
解决方法就是用 Crosses 函数, 这个函数用于判断是否经过了 某个阶段。
为什么能这样,在 Stage 的说明中有, 简单来说,这是一个有大小的枚举, 这样就可以判断是否经过某个过程。
我们的使用它的代码如下:
经过分两种, 正向和反向。 对应上下的 就是 进入了 显示状态, 或者离开了 显示状态。
所以事件的先后顺序流程如下, 只不过会快速跳过一些流程而已, 可以通过 Crosses 函数判断是否跳过了某一步。
参考资料:
http://klabgames.tech.blog.jp.klab.com/archives/1038277477.html
go mobile 得生命周期事件的更多相关文章
- [转] IOS中AppDelegate中的生命周期事件的调用条件
IOS中AppDelegate中的生命周期事件的调用条件 //当应用程序将要进入非活动状态执行,在此期间,应用程序不接受消息或事件,比如来电 - (void)applicationWillResign ...
- asp.net 页面生命周期事件详细
(1)请求页面:页请求发生在页生命周期开始之前. (2)开始:在开始阶段,将设置页属性,如Request和Response.在此阶段,页还将确定请求是回发请求还是新请求,并设置IsPostBack属性 ...
- ASP.NET -- WebForm -- 页面生命周期事件
ASP.NET -- WebForm -- 页面生命周期事件在页生命周期的每个阶段中,页将引发可运行您自己的代码进行处理的事件. 1. PreInit: 使用该事件来执行下列操作: 检查 IsPos ...
- [转]ASP.net Application 生命周期事件
生命周期事件和 Global.asax 文件 在应用程序的生命周期期间,应用程序会引发可处理的事件并调用可重写的特定方法.若要处理应用程序事件或方法,可以在应用程序根目录中创建一个名为 Global. ...
- Page 生命周期阶段 以及 生命周期事件
MSDN 关于 页面生命周期事件的详细介绍: http://msdn.microsoft.com/zh-cn/library/ms178472.aspx ASP.NET 页面生命周期,当IIS接收访 ...
- SpringBoot内置生命周期事件详解 SpringBoot源码(十)
SpringBoot中文注释项目Github地址: https://github.com/yuanmabiji/spring-boot-2.1.0.RELEASE 本篇接 SpringBoot事件监听 ...
- 不懂SpringApplication生命周期事件?那就等于不会Spring Boot嘛
学习方法之少废话:吹牛.装逼.叫大哥. 作者:A哥(YourBatman) 公众号:BAT的乌托邦(ID:BAT-utopia) 文末是否有彩蛋:有 目录 前言 正文 生命周期事件流程图 版本说明: ...
- 来扯点ionic3[3] 页面的生命周期事件,也就是凡间所说的钩子
首先要做一个诚挚的道歉,作为大四狗,因为升学的事情,断更两个月,所以要感谢各位仁慈的读者没有脱粉(好像也就50个粉丝).这一节,我们延续上一节制作的页面,来讨论声明周期钩子的事情. 以我的经验来看,多 ...
- ASP.NET最常用的页面生命周期事件
PreInit:在页生命周期的早期阶段可以访问的事件.在PreInit事件后,将加载个性化信息和页主题. Init:在所有的控件都已初始化,且已应用所有外观设置后引发.使用该事件来读取或初始化控件属性 ...
随机推荐
- shell之脚本练习
脚本需求集合贴-自主开发的 对频繁执行的任务有编写脚本的价值 对单次执行的任务就用笨的,简单的办法 1.对asterisk写一个脚本 查日志 输入日期--能够输出对应日期的日志 输入多个条件--能够输 ...
- JSP页面中<%! %>和<% %>的区别
JSP声明语句:<%!声明语句%>,通常声明全局变量.常量.方法.类JSP Scriptlet:<%java代码%>,其中可包含局部变量.java语句JSP表达式:<%= ...
- Oracle视图详解
转载自:http://blog.itpub.net/29785807/viewspace-1270120/ 一. 视图的定义 视图(view),也称虚表, 不占用物理空间,这个也是相对概念,因为视图本 ...
- C++的头文件和实现文件分别写什么
在C++编程过程中,随着项目的越来越大,代码也会越来越多,并且难以管理和分析.于是,在C++中就要分出了头(.h)文件和实现(.cpp)文件,并且也有了Package的概念. 对于以C起步,C#作为& ...
- Glibc 与 libc 的区别和联系
转http://blog.163.com/dragon_sjl@126/blog/static/100473339201107101517380/ 1.gcc(gnu collect compiler ...
- Linux从逻辑地址到物理地址
转自:http://blog.chinaunix.net/uid-24774106-id-3427836.html 我们都知道,动态共享库里面的函数的共享的,这也是动态库的优势所在,就是节省内存.C ...
- 避免HTML5六种错误用法
一.不要使用section作为div的替代品 人们在标签使用中最常见到的错误之一就是随意将HTML5的<section>等价于<div>--具体地说,就是直接用作替代品(用于样 ...
- CentOs of Tomcat commands
1.启动tomcat 进入tomcat目录的bin目录下 执行 [root@iZ253lxv4i0Z bin]# ./startup.sh Using CATALINA_BASE: /usr/loca ...
- BestCoder Round #85 hdu5776 sum
sum 题意: 问题描述 给定一个数列,求是否存在连续子列和为m的倍数,存在输出YES,否则输出NO 输入描述 输入文件的第一行有一个正整数T,表示数据组数. 接下去有T组数据,每组数据的第一行有两个 ...
- 【JavaScript】字符串处理函数集合
var $string = {}, toString, template, parseURL, buildURL, mapQuery, test, contains, trim, clean, cam ...