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

相关文章

基于Python开发电脑定时关机工具

《基于Python开发电脑定时关机工具》这篇文章主要为大家详细介绍了如何基于Python开发一个电脑定时关机工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 简介2. 运行效果3. 相关源码1. 简介这个程序就像一个“忠实的管家”,帮你按时关掉电脑,而且全程不需要你多做

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j

windows系统下shutdown重启关机命令超详细教程

《windows系统下shutdown重启关机命令超详细教程》shutdown命令是一个强大的工具,允许你通过命令行快速完成关机、重启或注销操作,本文将为你详细解析shutdown命令的使用方法,并提... 目录一、shutdown 命令简介二、shutdown 命令的基本用法三、远程关机与重启四、实际应用

Windows自动化Python pyautogui RPA操作实现

《Windows自动化PythonpyautoguiRPA操作实现》本文详细介绍了使用Python的pyautogui库进行Windows自动化操作的实现方法,文中通过示例代码介绍的非常详细,对大... 目录依赖包睡眠:鼠标事件:杀死进程:获取所有窗口的名称:显示窗口:根据图片找元素:输入文字:打开应用:依

基于Qt开发一个简单的OFD阅读器

《基于Qt开发一个简单的OFD阅读器》这篇文章主要为大家详细介绍了如何使用Qt框架开发一个功能强大且性能优异的OFD阅读器,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 目录摘要引言一、OFD文件格式解析二、文档结构解析三、页面渲染四、用户交互五、性能优化六、示例代码七、未来发展方向八、结论摘要

javafx 如何将项目打包为 Windows 的可执行文件exe

《javafx如何将项目打包为Windows的可执行文件exe》文章介绍了三种将JavaFX项目打包为.exe文件的方法:方法1使用jpackage(适用于JDK14及以上版本),方法2使用La... 目录方法 1:使用 jpackage(适用于 JDK 14 及更高版本)方法 2:使用 Launch4j(

在 VSCode 中配置 C++ 开发环境的详细教程

《在VSCode中配置C++开发环境的详细教程》本文详细介绍了如何在VisualStudioCode(VSCode)中配置C++开发环境,包括安装必要的工具、配置编译器、设置调试环境等步骤,通... 目录如何在 VSCode 中配置 C++ 开发环境:详细教程1. 什么是 VSCode?2. 安装 VSCo

windows端python版本管理工具pyenv-win安装使用

《windows端python版本管理工具pyenv-win安装使用》:本文主要介绍如何通过git方式下载和配置pyenv-win,包括下载、克隆仓库、配置环境变量等步骤,同时还详细介绍了如何使用... 目录pyenv-win 下载配置环境变量使用 pyenv-win 管理 python 版本一、安装 和

C#图表开发之Chart详解

《C#图表开发之Chart详解》C#中的Chart控件用于开发图表功能,具有Series和ChartArea两个重要属性,Series属性是SeriesCollection类型,包含多个Series对... 目录OverviChina编程ewSeries类总结OverviewC#中,开发图表功能的控件是Char

Python使用pysmb库访问Windows共享文件夹的详细教程

《Python使用pysmb库访问Windows共享文件夹的详细教程》本教程旨在帮助您使用pysmb库,通过SMB(ServerMessageBlock)协议,轻松连接到Windows共享文件夹,并列... 目录前置条件步骤一:导入必要的模块步骤二:配置连接参数步骤三:实例化SMB连接对象并尝试连接步骤四: