您的位置:首页 > 职场人生

黑马程序员_学习日记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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐