黑马程序员_学习日记32_winphone7开发_多任务模拟(Push Notification)
2012-06-03 22:14
465 查看
多任务的模拟
1、 基本知识
应用程序模型只支持在前台执行
如果另一个程序在你的程序正在执行的时候启动,程序收到一个将要被终止的事件通知
应用从前台离开的时候并没有被马上终止,如果需要保留状态,就要自己编写一些逻辑来处理这些事情(Tombstone)
在程序关闭状态下,可以通过web service向程序发送信息以及更新程序状态(Push Notification)
2、 Tombstone
应用程序的可执行模式:Tombstoning、Page State、Application state、Persistent
data、Transient state。在Tombstoning和Transient state模式下模拟多任务,在Tombstone模式下,应用程序被操作系统Terminate,就需要保存Transient
state,以备于应用复活后恢复应用原状态。
Lifecycle包括:Launching、Running、Closing、Deactivating、Activating五种运行态。Deactivating、Activating就是Tombstone下的运行态。在这两个运行态下可以完成唤醒后的状态或数据的转移
PhoneApplicationService,保存状态信息
调试时打开output窗口:Debug→Windows→output窗口
3、 Push Notification
在现阶段云端运算技术,尤其是 Windows Azure
平台的演进已成熟之际,微软特别在 Windows Azure
上为 WP7
架设了一个讯息的交换中心,称为 Microsoft Push Notification Services(MPNS),它可以支持由云端应用程序或服务应用程序透过它将讯息传递给
WP7 手机,而 WP7
的通道由 WP7
应用程序提交给服务应用程序,然后由服务应用程序将讯息发送给 MPNS,再由 MPNS
将讯息发送给 WP7
手机。如下图所示:
l Notification类型
WP7对于MPNS上(Microsoft Push Notification Service)的客户端支持,可分为三种讯息格式:纯讯息、讯息砖块、讯息列。
纯讯息(RAW)是一种不特别对讯息做格式上处理的数据流。WP7操作系统本身不会针对RAW讯息进行用户接口的处理,也就是WP7应用程序要全权处理RAW讯息,这适合在WP7与服务间交换数据的功能,或是想要自己控制处理讯息通知的行为与用户接口的需求。
讯息砖块(Tile)是一种会安排在WP7首页内的Quick Lauch区域中的用户接口组件。
讯息列(Toast)则是会出现在WP7用户接口内的一种讯息通知方式。
发送的讯息类别,由云端应用程序决定,发送RAW讯息以二进制格式传输,而发送Tile或Toast则要求按照指定的格式传送。
l Push Notification应用程序实作概观
WP7的MPNS服务分为三个部分:客户端、服务器、讯息设定
客户端部分由WP7内的Microsoft.Phone.dll所封装的Microsoft.Phone.Notificaton命名空间支持,内含下列主要对象:
HttpNotification:包装来自MPNS的讯息内容。
HttpNotificationChannel:提供与MPNS的双向通讯功能
为什么使用PushNotification?
1、 只有一个应用程序在前台运行
2、 第三方应用程序不能在后台不断拉数据
3、 。。。
推送消息过程:
1、 WP设备到MSNS注册PN服务,并得到唯一的服务URI(一台一个)
2、 WP设备把服务URI传递给Cloud服务,并注册
3、 当有更新信息发生时,Cloud服务往MSNS发送更新消息
4、 MSNS把更新消息发送到WP设备上
5、 。。。
使用规范:
1、 最多15个PushNotification
2、 询问用户是否使用Push Notification
3、 为用户提供取消订阅选项
消息类型:
Raw Notification
1、 可以发送任何格式数据
2、 应用程序可以根据需要加工数据
3、 应用程序
Toast Notification
1、 发送的数据为指定的XML格式
2、 如果应用程序在运行。。。
Tile Notification
1、 发送的数据为指定的xml格式
2、 不会往应用程序进行发送
3、 如果用户把应用程序pin to start,那么更新数据发送到start screen的tile里面
Push Notification:
为手机端应用和webservice之间建立了一条专用、持久、稳定的通道来推送通知。当通道建立后,手机端应用可以接收webservice的任何信息
信息分类:
(1) Tile Notification:可以改变Quick Lanuch area内的图标内容(图片、文字等)的方式,但需要程序被Pin
to Start
(2) Toast Notification:在屏幕上面可以显示一个提示栏的方式,当点击提示栏可以打开应用程序
(3) Raw Notification:直接使用Http方式来接收(http
polling)通知的方式。是不可见的,以后台方式传送通知
l 创建客户端:
HttpChannel = new HttpNotificationChannel(ChannelName,”TestService”);
httpChannel.Open();
//绑定notification
httpChannel.BindToShellToast();
httpChannel.BindToShellTile(uris);
//获取notification channel URI
httpChannel.ChannelUriUpdated+= new EventHandler<NotificationChannelUriEventArgs>(httpChannel_ChannelUriUpdated);
//获取Raw notification
httpChannel.HttpNotificationReceived+=newEventHandler<HttpNotificationEventAegs>(httpChannel_HttpNotificationReceived);
//获取Toast notification
httpChannel.ShellToastNotificationReceived+=new
EventHandler<NotificationEventArgs>(httpChannel_ShellToastNotificationReceived);
//获取Push notification error message
httpChannel.ErrorOccurred+=newEventHandler<NotificationChannelErrorEventArgs>(httpChannel_ExceptionOccurred);
//对于Tile notification是由系统来接收的,所以没有相应的Event
l 创建服务器端
都是以Http方式发送不同的通知;需要配置相应的参数,告诉Push Notification Service所发送的类型是什么
HttpWebRequestrequest = (HttpWebRequest)WebRequest.Create(channelUri);
request.Method= WebRequestMethods.Http.Post;
request.ContentType= “text/xml;charset=utf-8”;
request.ContentLength= notificationmessage.Length;
request.Headers[“X-MessageID”]=Guid.NewGuid().ToString();
//设置发送的Notification类型
request.Headers[“X-WindowsPhone-Target”]=”toast”;
request.Headers[“X-NotificationClass”]=”2”;
l Response数据
response.StatusCode//Ok表示成功
response.Headers[X-DeviceConnectionStatus]
response.Headers[X-SubscriptionStatus]
response.Headers[X-NotificationStatus]
(1)
Tile Notification:制作Tile图片
“Content-Type:text/xml\r\nX-WindowsPhone-Target:token\r\n\r\n”
<?xmlversion=”1.0”encoding=”utf-8”?>
<wp:Notificaion xmlns:wp=”WPNotification”>
<wp:Tile>
<wp:BackgroundImage>
<background imagepath>//这里要填写图片所在的相对位置
</wp:BackgroundImage>
<wp:Count>
<count>
</wp:Count>
<wp:Title>
<title>
</wp:Title>
</wp:Tile>
</wp:Notification>
(2)
Toast Notification
ToastMessage:
“Content-Type:text/xml\r\nX-WindowsPhone-Target:toast\r\n\r\n”
<?xmlversion=”1.0”encoding=”utf-8”?>
<wp:Notificationxmlns:wp=”WPNotification”>
<wp:Toast>
<wp:Text1>
<string>
</wp:Text1>
<wp:Text2>
<string>
</wp:Text2>
</wp:Toast>
</wp:Notificaion>
WP7默认接收15个Push Notification
1、 基本知识
应用程序模型只支持在前台执行
如果另一个程序在你的程序正在执行的时候启动,程序收到一个将要被终止的事件通知
应用从前台离开的时候并没有被马上终止,如果需要保留状态,就要自己编写一些逻辑来处理这些事情(Tombstone)
在程序关闭状态下,可以通过web service向程序发送信息以及更新程序状态(Push Notification)
2、 Tombstone
应用程序的可执行模式:Tombstoning、Page State、Application state、Persistent
data、Transient state。在Tombstoning和Transient state模式下模拟多任务,在Tombstone模式下,应用程序被操作系统Terminate,就需要保存Transient
state,以备于应用复活后恢复应用原状态。
Lifecycle包括:Launching、Running、Closing、Deactivating、Activating五种运行态。Deactivating、Activating就是Tombstone下的运行态。在这两个运行态下可以完成唤醒后的状态或数据的转移
PhoneApplicationService,保存状态信息
调试时打开output窗口:Debug→Windows→output窗口
3、 Push Notification
在现阶段云端运算技术,尤其是 Windows Azure
平台的演进已成熟之际,微软特别在 Windows Azure
上为 WP7
架设了一个讯息的交换中心,称为 Microsoft Push Notification Services(MPNS),它可以支持由云端应用程序或服务应用程序透过它将讯息传递给
WP7 手机,而 WP7
的通道由 WP7
应用程序提交给服务应用程序,然后由服务应用程序将讯息发送给 MPNS,再由 MPNS
将讯息发送给 WP7
手机。如下图所示:
l Notification类型
WP7对于MPNS上(Microsoft Push Notification Service)的客户端支持,可分为三种讯息格式:纯讯息、讯息砖块、讯息列。
纯讯息(RAW)是一种不特别对讯息做格式上处理的数据流。WP7操作系统本身不会针对RAW讯息进行用户接口的处理,也就是WP7应用程序要全权处理RAW讯息,这适合在WP7与服务间交换数据的功能,或是想要自己控制处理讯息通知的行为与用户接口的需求。
讯息砖块(Tile)是一种会安排在WP7首页内的Quick Lauch区域中的用户接口组件。
讯息列(Toast)则是会出现在WP7用户接口内的一种讯息通知方式。
发送的讯息类别,由云端应用程序决定,发送RAW讯息以二进制格式传输,而发送Tile或Toast则要求按照指定的格式传送。
l Push Notification应用程序实作概观
WP7的MPNS服务分为三个部分:客户端、服务器、讯息设定
客户端部分由WP7内的Microsoft.Phone.dll所封装的Microsoft.Phone.Notificaton命名空间支持,内含下列主要对象:
HttpNotification:包装来自MPNS的讯息内容。
HttpNotificationChannel:提供与MPNS的双向通讯功能
为什么使用PushNotification?
1、 只有一个应用程序在前台运行
2、 第三方应用程序不能在后台不断拉数据
3、 。。。
推送消息过程:
1、 WP设备到MSNS注册PN服务,并得到唯一的服务URI(一台一个)
2、 WP设备把服务URI传递给Cloud服务,并注册
3、 当有更新信息发生时,Cloud服务往MSNS发送更新消息
4、 MSNS把更新消息发送到WP设备上
5、 。。。
使用规范:
1、 最多15个PushNotification
2、 询问用户是否使用Push Notification
3、 为用户提供取消订阅选项
消息类型:
Raw Notification
1、 可以发送任何格式数据
2、 应用程序可以根据需要加工数据
3、 应用程序
Toast Notification
1、 发送的数据为指定的XML格式
2、 如果应用程序在运行。。。
Tile Notification
1、 发送的数据为指定的xml格式
2、 不会往应用程序进行发送
3、 如果用户把应用程序pin to start,那么更新数据发送到start screen的tile里面
Push Notification:
为手机端应用和webservice之间建立了一条专用、持久、稳定的通道来推送通知。当通道建立后,手机端应用可以接收webservice的任何信息
信息分类:
(1) Tile Notification:可以改变Quick Lanuch area内的图标内容(图片、文字等)的方式,但需要程序被Pin
to Start
(2) Toast Notification:在屏幕上面可以显示一个提示栏的方式,当点击提示栏可以打开应用程序
(3) Raw Notification:直接使用Http方式来接收(http
polling)通知的方式。是不可见的,以后台方式传送通知
l 创建客户端:
HttpChannel = new HttpNotificationChannel(ChannelName,”TestService”);
httpChannel.Open();
//绑定notification
httpChannel.BindToShellToast();
httpChannel.BindToShellTile(uris);
//获取notification channel URI
httpChannel.ChannelUriUpdated+= new EventHandler<NotificationChannelUriEventArgs>(httpChannel_ChannelUriUpdated);
//获取Raw notification
httpChannel.HttpNotificationReceived+=newEventHandler<HttpNotificationEventAegs>(httpChannel_HttpNotificationReceived);
//获取Toast notification
httpChannel.ShellToastNotificationReceived+=new
EventHandler<NotificationEventArgs>(httpChannel_ShellToastNotificationReceived);
//获取Push notification error message
httpChannel.ErrorOccurred+=newEventHandler<NotificationChannelErrorEventArgs>(httpChannel_ExceptionOccurred);
//对于Tile notification是由系统来接收的,所以没有相应的Event
l 创建服务器端
都是以Http方式发送不同的通知;需要配置相应的参数,告诉Push Notification Service所发送的类型是什么
HttpWebRequestrequest = (HttpWebRequest)WebRequest.Create(channelUri);
request.Method= WebRequestMethods.Http.Post;
request.ContentType= “text/xml;charset=utf-8”;
request.ContentLength= notificationmessage.Length;
request.Headers[“X-MessageID”]=Guid.NewGuid().ToString();
//设置发送的Notification类型
request.Headers[“X-WindowsPhone-Target”]=”toast”;
request.Headers[“X-NotificationClass”]=”2”;
l Response数据
response.StatusCode//Ok表示成功
response.Headers[X-DeviceConnectionStatus]
response.Headers[X-SubscriptionStatus]
response.Headers[X-NotificationStatus]
(1)
Tile Notification:制作Tile图片
“Content-Type:text/xml\r\nX-WindowsPhone-Target:token\r\n\r\n”
<?xmlversion=”1.0”encoding=”utf-8”?>
<wp:Notificaion xmlns:wp=”WPNotification”>
<wp:Tile>
<wp:BackgroundImage>
<background imagepath>//这里要填写图片所在的相对位置
</wp:BackgroundImage>
<wp:Count>
<count>
</wp:Count>
<wp:Title>
<title>
</wp:Title>
</wp:Tile>
</wp:Notification>
(2)
Toast Notification
ToastMessage:
“Content-Type:text/xml\r\nX-WindowsPhone-Target:toast\r\n\r\n”
<?xmlversion=”1.0”encoding=”utf-8”?>
<wp:Notificationxmlns:wp=”WPNotification”>
<wp:Toast>
<wp:Text1>
<string>
</wp:Text1>
<wp:Text2>
<string>
</wp:Text2>
</wp:Toast>
</wp:Notificaion>
WP7默认接收15个Push Notification
相关文章推荐
- 黑马程序员_学习日记32_winphone7开发_Isolated Storage
- 黑马程序员_学习日记32_winphone7开发_应用程序生命周期
- 黑马程序员_学习日记29_winphone7开发_概述
- 黑马程序员_学习日记30_winphone7开发_项目的基本档案结构
- 黑马程序员_学习日记31_winphone7开发_控件
- 黑马程序员_学习日记74_727ASP.NET(模拟Session、jsValidate异步验证表单、AjaxForm异步提交表单)
- 黑马程序员_学习日记84_814WP7开发(画刷Brush、变换Transform、样式、换肤)
- 黑马程序员_学习日记51_621数据库开发及ADO.Net(游标、动态sql)
- 黑马程序员_学习日记49_618数据库开发及ADO.Net(多条件搜索、case…when…语句、索引Index、子查询、分页、Join语句)
- 黑马程序员_学习日记45_612数据库开发及ADO.Net(SQL语言)
- 黑马程序员_学习日记50_619数据库开发及ADO.Net(临时表、表变量、视图、变量、if…else…和while、事务、存储过程、触发器)
- 黑马程序员_学习日记46_614数据库开发及ADO.Net(约束、数据检索)
- 黑马程序员--Java学习日记之eclipse开发工具的熟练使用,磨刀不误砍柴工!
- 黑马程序员_学习日记47_615数据库开发及ADO.Net(连接字符串、SqlDataReader对象、连接池)
- 黑马程序员_学习日记48_616数据库开发及ADO.Net(带参数的Sql语句、数据库与文本文件导入导出、省市联动、资料管理器、DataSet (ado.net断开式数据访问)、SQLHelper)
- 黑马程序员_学习日记33_winphone7开发_设备开发
- 黑马程序员--Java学习日记之eclipse开发工具的熟练使用
- 黑马程序员学习日记--java编程基础
- 黑马程序员_学习日记40_605基础加强(自定义泛型、装拆箱、foreach、文件操作、字符串与byte数组转换)
- 黑马程序员——java基础学习日记(10)