Main窗体代码如下
#Region 代码说明
'启动这个例程后,再运行其它程序,然后再切换到这个程序会触发Resume事件
'启动这个例程后,再运行其它程序,然后再运行其它程序,最后再切换到这个程序会触发Create事件
'而我编写这个例程的目的,就是想让大家对在后台的程序切换到前面时Create事件要注意
#End Region
#Region Project Attributes
#ApplicationLabel: 剖析Resume和Pause事件
#VersionCode: 1
#VersionName:
'SupportedOrientations(支持的方向) 值可以是: unspecified(未指定), landscape(纵向)或portrait(横向)。
#SupportedOrientations: unspecified
#CanInstallToExternalStorage: False
#End Region
#Region Activity Attributes
#FullScreen: False
#IncludeTitle: True
#End Region
Sub Process_Globals
'这里明的全局变量在应用启动时被使用。
'这里声明的变量能被所有模块使用。
Dim pg_Numbers As Int :pg_Numbers=0
End Sub
Sub Globals
'这里的声明的全局变量在Activity 创建时声明。
'这里声明的变量只能在此模块使用。
Dim btGotoSub As Label
Dim noTest As Notification
End Sub
Sub Activity_Create(FirstTime As Boolean)
'为防止程序从后台转到前台时防止重复执行,加了此代码段
' Activity.RemoveAllViews
Activity.Title="Main窗体 - 剖析Resume和Pause事件"
Activity.Color=Colors.DarkGray
'开始:屏幕上放置按钮 -----------------------------------------------------------
btGotoSub.Initialize("btGotoSub")
btGotoSub.Text="到子窗体"
btGotoSub.TextSize=25
btGotoSub.Gravity=Gravity.CENTER
Activity.AddView(btGotoSub,(100%x-200dip)/2,60dip,200dip,40dip)
'结束:屏幕上放置按钮 -----------------------------------------------------------
'开始:通知栏消息处理 -----------------------------------------------------------
If noTest.IsInitialized =False Then noTest.Initialize
'Notification类很特别,如果你只进行了Initialize ,而没有使用Icon属性,那么消息的发送会失败
'这样的代码是错误的:noTest.Icon = ""
'即便你没有给通知栏消息准备图标,可以用这个B4A例程的图标,如noTest.Icon = "icon"
noTest.Icon = "icon"
noTest .SetInfo( "主窗体 Create 事件", getDate ,Me)
pg_Numbers=pg_Numbers+1
noTest.Notify(pg_Numbers)
'结束:通知栏消息处理 -----------------------------------------------------------
End Sub
Sub Activity_Resume
'当Activity_Create完成后会立刻调用Activity_Resume.
'当继续一个暂停的activity也会调用Activity_Resume (当被切换到后台的 Activity 又被切换到前台).
'Msgbox("进入 Activity_Resume 事件" , "消息")
noTest .SetInfo( "主窗体 Resume 事件", getDate ,Me)
pg_Numbers=pg_Numbers+1
noTest.Notify(pg_Numbers)
End Sub
Sub Activity_Pause (UserClosed As Boolean)
'Sub Activity_Pause (UserClosed As Boolean) 事件的调用在下面三种情况之一下发生:
'1、当 Activity 从前台转换到后台时,就会调用 Activity_Pause 子程序。
'2、当 Activity 在前台,但是配置发生变化时 (这会导致 Activity 暂停并被销毁) 也会调用Activity_Pause子程序。
'3、当你在一个B4A软件的 Activity 窗体中打开另一个 Activity 时 (通过调用 StartActivity 方法,
'StartActivity 方法可实现在不同 Activity 之间切换 ) 当前的进程首先被暂停,
'同时调用 Activity_Pause子程序,然后另外的 Activity 将被建立(如果需要的话 ),
'最后当前进程会继续执行。
'每当 Activity 从前台切换到后台时,Activity_Pause 就会被调用. 这可能是以下原因造成的:
'1、启动了一个不同的 Activity 。
'2、Home 键被按了。
'3、配置改变事件被触发 ( 例如手机显示方向发生变化 )。
'4、Back 键被按了。
'
'在1和2的情况下, Activity 将会被暂停,并被保存到内存中以便以后再次使用。
'在3的情况下, Activity 将会被暂停、销毁,然后再建立(并继续)。
'
'在4的情况下,Activity 将会被暂停,然后销毁。按 Back 键类似于关闭 Activity 。
'在这种情况下,你没必要保存任何实例特定的信息(例如PacMan游戏中的pacman的位置 )。
'这种情况下UserClosed 参数为true,其他情况下都是False。
'当你调用 Activity.Finish 时,UserClosed 参数也是true。
'Activity.Finish 方法暂停和销毁当前 Activity ,效果和Back键类似。
'你可以使用UserClosed 参数来决定需要保存哪些数据和重置任何相关的进程变量为初始化值
'(如果位置是进程变量的话,移动pacma n的位置到中间).
If UserClosed Then
' Msgbox("进入 Activity_Pause 事件" & CRLF & "UserClosed = True", "消息")
noTest .SetInfo( "主窗体 Pause 事件", getDate & "UserClosed = True" ,Me)
Else
' Msgbox("进入 Activity_Pause 事件" & CRLF & "UserClosed = False", "消息")
noTest .SetInfo( "主窗体 Pause 事件",getDate & "UserClosed = False" ,Me)
End If
pg_Numbers=pg_Numbers+1
noTest.Notify(pg_Numbers)
End Sub
'点击按钮进入子窗体
Sub btGotoSub_Click
StartActivity( subActivity)
End Sub
'返回当前时间
Sub getDate () As String
Return DateTime.Time(DateTime.Now) & " " & (pg_Numbers+1)
End Sub