Windows Phone 8开发入门(六)

2024-06-12 21:08
文章标签 windows 入门 开发 phone

本文主要是介绍Windows Phone 8开发入门(六),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!



主要内容:后台代理

后退堆栈

操作返回堆栈

Private void PurgeBackStackButton_Click(object sender,RoutedEventArgs e)

{

WhileNavigationService.CanGoBack)

NavigationService.RemoveBackEntry();

}

RemoveBackEntry方法用于从后退堆栈中移除最近的条目,如果没有要移除的条目,则引发InvalidOperationException.如果您想移除多个项目,则多次调用此方法。此API是同步的,因此必须从UI线程调用。

使用后退堆栈

使用新页面替换当前页面

删除所有页面

清除整个页面后退堆栈并替换为给定页面。

 

前台任务

一般Windows phone应用程序是运行在“前台”

任何时间只能有一个应用运允许运行在前台

目的是保证最佳的用户体验和延长手机电量使用时长

 

后台代理

后台代理

Windows Phone应用程序可启动一个后台代理为其服务

可以定期代理或者资源密集型代理

每一个应用程序只允许使用一个代理

后台代理都允许应用程序在后台执行代码,即使当应用程序未在前台运行时也是如此

不同类型的计划任务是针对不同类型的后台处理方案设计的,具有不同的行为和限制

后台代理使用警告

Windows Phone操作系统限制了同时激活的代理的数量

除非在适当的条件下调用,否则代理可能不会启用

后台代理只在操作系统认为资源足够时,方可运行

如果手机处于节电模式状态下,那么所有的后台代理将被终止

用户可以管理其手机上的每个应用的后台代理,选择启用或者禁用

代理和任务

不同类型的计划任务是针对不同类型的后台处理方案设计的,因此具有不同的行为和限制

两种类型的任务

Priodic tasks定期代理

Resource intensive tasks资源密集型代理

代理的代码由应用程序在从BackgroundAgent继承的类中实现。代理启动时,操作系统调用OnInvoke(ScheduledTask).在该方法中,应用程序可以确定它以哪种ScheduleTask类型运行,并执行相应的操作。

定期代理(PeriodicTask Agents)

定期代理通常每隔30分钟运行一次。若要优化电池使用时间,定期代理的运行可以与其他后台进程一致,因此执行时间可能最多漂移10分钟

定期代理通常运行25秒。其他限制可能会导致嗲了提取终止。

节电模式是一个选项,用户可以在设备上启用该选项以指示应该优先考虑电池使用时间。如果启用此模式,则定期代理可能不运行,即使间隔已过也是如此。

为了帮助最大程度地提高设备的电池使用时间,对手机上可以计划的定期代理数量进行了硬性限制。它因每个设备配置而异并且可以低到6.还有另一个低于硬性限制的限制,超过该限制之后会警告用户他们正在运行多个后台代理,因此电池消耗可能比较快。

资源密集型代理(ResourceIntensive Agents)

资源密集型代理通常运行10分钟。其他限制可能会导致代理提取终止。

除非设备连接到外部电源,否则不运行资源密集型代理。

除非设备通过Wi-FiPC连接建立网络连接,否则资源密集型代理不运行。

除非设备的电池电量高于90%,否则资源密集型代理不运行

除非设备屏幕锁定,否则资源密集型代理不运行

当手机呼叫处于活动状态时,资源密集型代理不运行

不能将网络更改为手机网络,即如果资源密集型代理尝试调用指定MobileBroadbandGSM()MobileBroadbandCDMA()AssociateToNetworkInterface(Socket,NetworkInterfaceinfo),则该方法调用失败。

后台代理功能

允许

Tiles

Toast

Location

Network

R/W ISO store

Sockets

限制

Display UI

XNA libraries

Microphone and camera

Sensors

Play audio(may only use background audio APIs)

在后台运行Windows Phone 8的位置跟踪

Windows Phone 8上,在用户导航离开之后,只要位置跟踪应用持续活跃地跟踪位置,它就可以持续在后台运行

此功能支持诸如提供逐向导航的应用这样的方案

对于在移动设备上运行的应用,耗电量是一个重要注意事项。在后台运行应用时,您可以采取一些步骤降低电池消耗,进而提高用户对应用的满意度

创建后台代理

Add new project-->Windows Phone -->Windows PhoneSecheduled Task Agent-->创建LocationLogTaskAgent工程

Captions Log Solution

解决方案中包含两个工程

LocationLogger:Windows Phone工程---启动程序所在的工程

LocationLogTaskAgent:位置跟踪的后台代理工程

解决方案中可包含多个不同类型的工程

连接后台代码的工程

CaptainLog工程引用了后台代理LocationTaskAgent工程

前台的应用不会直接在代码中引用dialing的类

然而,我们必须明确的连接两个应用,为此在CaptainsLog工程引用LocationTaskAgent的输出

后台代理代码

Namespace LocationLogTaskAgent

{

Public class ScheduledAgent:ScheduledTaskAgent

{

Protected override void OnInvoke(ScheduledTask task)

{

NotifyComplete();

}

}

}

我们必须在OnInvoke方法中实现代理功能

当其完成时通知系统

后台代理的数据分享

Protected override void OnInvoke(ScheduledTask task)

{

String message="";

String logString="";

If(LoadLogFromIsolatedStorageFile()

{

Message="Loaded";

}

Else{

Message="Initialised";

}

……

}

第一件事情代理完成的就是从独立存储空间加载日志字符串

在日志的末尾加上当前的位置信息

数据访问

Public bool LoadLogFromIsolatedStorageFile()

{

Mut.WaitOne();//wait until it is safe to enter

Try{

//read the file here

Return true;

}

Catch{

LogText="";

Return false;

}

Finally{

Mut.ReleaseMutex();//release the Mutex.

}

通过互斥保护访问独立存储空间的文件

访问结束后释放互斥

显示通知

Protected override void OnInvoke(ScheduledTask task)

{

……

ShellToast toast =new ShellToast();

Toast.Title="Location Log";

Toast.Content=message;

Toast.Show();

……

}

后台任务可以发送Toast通知的消息

如果用户轻触通知消息,则则会启动前台的应用

Toast通知消息在前台主应用启动时不会显示

计划任务

PeriodicTask  t;

t=SecheduledActionService.Find(taskName) as PeroidicTask;

Bool fond=(t!=null);

If(!found)

{

t=new PeriodicTask(taskName);

}

t.Description=description;

t.ExpirationTime=DataTime.Now.AddDays(10);

If(!found)

{

ScheduledActionService.Add(t);

}

Else

{

ScheduledActionService.Remove(taskName);

ScheduledActionService.Add(t);

}

调试后台任务

#if DEBUG_AGENT

ScheduledActionService.LaunchForTest(taskName,TimeSpan.FromSeconds(60);

#endif

如果调试代码时,我们需要等待30分钟看后台代理的执行结果,那么将是非常令人懊恼的

如果我们正在调试代码,可以强制启动代理服务

这样的代码可以在Release编译时被有条件的排除

后台代理最佳做法

最小化网络请求的次数和频率

停止活动的TimerDispatcherTimer对象,如果它们仅用于前台功能(如UI )

停止所有XAML动画

如果应用程序不再需要在后台运行,通过移除Geolocator类的PositionChangedStatusChanged事件的事件处理程序或通过调用GeoCoordinateWatcher类的Stop()方法停止跟踪位置

后台文件传输

可创建后台文件传输的任务从独立存储空间传送文件

即使应用没有运行,传输仍旧可以运行

应用程序可监视下载状态,并显示其进度

后台传输服务仅支持使用HTTPHTTPS的传输,不支持FTP

应用程序管理传输任务的队列

应用可查询激活的传输状态

后台传输用户界面最佳做法

后台文件传输应该有用户启动,如通过点击某个按钮

您必须提供允许用户查看所有后台传输的状态和传输进度的UI

必须提供用户取消任何以及所有当前传输的机制

使用将文件传输限制为仅通过Wi-Fi以及在连有外部电源时进行的默认传输首选项。可以使用TransferPreferences属性设置用户的选择

如果后台传输的状态为WaitingForExternalPower,WatingForExternalPowerDueToBatterySaverMode,WatingForWiFiWatingForNonVoiceBlockingNetWork,则向用户提供一个消息,通知他们传输正在等待的原因(恢复传输的步骤)

后台传输应遵循的建议

在关联的传输操作完成之前,不要尝试访问或修改“/shared/transfers”目录中的目标文件

BackgroundTransferRequest对象的Tag属性可用于将关联的自定义数据与某个传输关联

访问Requests属性时,会创建BackgroundTransferRequest的新实例。建议

为防止内存泄露,建议您避免经常(如在某个游戏循环中)访问此属性来查询请求数量

只要不再使用返回的对象,就迅速处置它们。相同的建议也适用于Find(String)方法,该方法在找到提供的传输ID时将创建新的实例

TransferStatusChangedTransferProgressChanged事件的事件处理程序应该快速返回以便用户界面不会变得行动迟缓。从独立存储中读取以及向独立存储中写入的速度可能很慢,如果有可能的话,应该在单独的工作线程上执行

TotalBytesToReceive属性指示文件下载的总大小。如果该值为-1,则表示文件大小未知。

服务器应该在HTTP响应标头中返回内容长度,以便让用户知道传输的大小和进度

服务器必须支持来着客户端的Range请求以改进性能。后台传输有可能会在进行时暂停和恢复。不支持Range请求将导致性能降低,因为传输一旦暂停,必须重新启动

建议您在浏览器中或者通过后台传输应用程序外部的某一个其他机制测试服务器端功能以确保正常工作

这篇关于Windows Phone 8开发入门(六)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1055341

相关文章

从入门到精通MySQL联合查询

《从入门到精通MySQL联合查询》:本文主要介绍从入门到精通MySQL联合查询,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下... 目录摘要1. 多表联合查询时mysql内部原理2. 内连接3. 外连接4. 自连接5. 子查询6. 合并查询7. 插入查询结果摘要前面我们学习了数据库设计时要满

从入门到精通C++11 <chrono> 库特性

《从入门到精通C++11<chrono>库特性》chrono库是C++11中一个非常强大和实用的库,它为时间处理提供了丰富的功能和类型安全的接口,通过本文的介绍,我们了解了chrono库的基本概念... 目录一、引言1.1 为什么需要<chrono>库1.2<chrono>库的基本概念二、时间段(Durat

解析C++11 static_assert及与Boost库的关联从入门到精通

《解析C++11static_assert及与Boost库的关联从入门到精通》static_assert是C++中强大的编译时验证工具,它能够在编译阶段拦截不符合预期的类型或值,增强代码的健壮性,通... 目录一、背景知识:传统断言方法的局限性1.1 assert宏1.2 #error指令1.3 第三方解决

SpringBoot开发中十大常见陷阱深度解析与避坑指南

《SpringBoot开发中十大常见陷阱深度解析与避坑指南》在SpringBoot的开发过程中,即使是经验丰富的开发者也难免会遇到各种棘手的问题,本文将针对SpringBoot开发中十大常见的“坑... 目录引言一、配置总出错?是不是同时用了.properties和.yml?二、换个位置配置就失效?搞清楚加

从入门到精通MySQL 数据库索引(实战案例)

《从入门到精通MySQL数据库索引(实战案例)》索引是数据库的目录,提升查询速度,主要类型包括BTree、Hash、全文、空间索引,需根据场景选择,建议用于高频查询、关联字段、排序等,避免重复率高或... 目录一、索引是什么?能干嘛?核心作用:二、索引的 4 种主要类型(附通俗例子)1. BTree 索引(

Redis 配置文件使用建议redis.conf 从入门到实战

《Redis配置文件使用建议redis.conf从入门到实战》Redis配置方式包括配置文件、命令行参数、运行时CONFIG命令,支持动态修改参数及持久化,常用项涉及端口、绑定、内存策略等,版本8... 目录一、Redis.conf 是什么?二、命令行方式传参(适用于测试)三、运行时动态修改配置(不重启服务

Python中对FFmpeg封装开发库FFmpy详解

《Python中对FFmpeg封装开发库FFmpy详解》:本文主要介绍Python中对FFmpeg封装开发库FFmpy,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、FFmpy简介与安装1.1 FFmpy概述1.2 安装方法二、FFmpy核心类与方法2.1 FF

基于Python开发Windows屏幕控制工具

《基于Python开发Windows屏幕控制工具》在数字化办公时代,屏幕管理已成为提升工作效率和保护眼睛健康的重要环节,本文将分享一个基于Python和PySide6开发的Windows屏幕控制工具,... 目录概述功能亮点界面展示实现步骤详解1. 环境准备2. 亮度控制模块3. 息屏功能实现4. 息屏时间

MySQL DQL从入门到精通

《MySQLDQL从入门到精通》通过DQL,我们可以从数据库中检索出所需的数据,进行各种复杂的数据分析和处理,本文将深入探讨MySQLDQL的各个方面,帮助你全面掌握这一重要技能,感兴趣的朋友跟随小... 目录一、DQL 基础:SELECT 语句入门二、数据过滤:WHERE 子句的使用三、结果排序:ORDE

在Windows上使用qemu安装ubuntu24.04服务器的详细指南

《在Windows上使用qemu安装ubuntu24.04服务器的详细指南》本文介绍了在Windows上使用QEMU安装Ubuntu24.04的全流程:安装QEMU、准备ISO镜像、创建虚拟磁盘、配置... 目录1. 安装QEMU环境2. 准备Ubuntu 24.04镜像3. 启动QEMU安装Ubuntu4