我正在研究在Visual Studio.Net上使用Mono的移动应用程序。
当前,我们有一个要从Windows CE转换为Android的应用程序。原始程序使用小的BackgroundWorkers来保持UI的响应性,并使用ProgressChanged事件对其进行更新。但是,我一直在阅读,在Android中有可以替换该功能的服务。
阅读有关服务的优缺点,我知道它们通常被使用,因为它们比线程具有更高的优先级,并且主要是,如果要在多个应用程序中使用该功能,则它们的优先级更高。
我发现比较线程和服务的更多信息表示服务可以更好地用于多个任务(例如下载多个文件),而线程可以更好地用于单个任务(例如上传单个文件)。我考虑此信息,因为BackgroundWorker使用线程。
我有什么想念的吗?基本上,一项服务应该用于较长的任务,因为操作系统赋予它更好的优先级(被杀死的风险较小),而Threads / BackgroundWorkers对于较短的任务则更好。还有其他优点/缺点可以使用其中一个吗?
先感谢您!
[编辑]如果您需要一个非常具体的问题...告诉我何时以及为什么使用服务而不是BackgroundWorker?那会很有用。
我必须在Android上重新创建一些功能:-GPS定位和指南针信息-大多数情况下,当某些事件正在起作用并在其运动轨迹中进行跟踪时,必须能够正常工作以获取设备的位置。-一个非常长的过程,甚至可能持续一个小时。
最后一个是我关注的那个。它必须非常可靠且负责任,既可以让用户了解正在执行的操作,又可以保持工作状态,即使用户转移到其他活动或功能(进行呼叫,按下主页按钮等)也是如此。
除此之外,我相信在WinCE上使用BackgroundWorker的其他功能不会对Android产生问题。
[Edit 2:20140225]但是,我想知道AsyncTask是否可以在下一个场景中为我提供帮助:-该应用程序可以在另一设备上读写信息。这些命令本质上是简短的,而且答案很快,因此对于单个命令来说没有问题。但是,有一个过程可能要花一个小时左右的时间,在此期间,它将询问设备的状态。你会怎么做?
我认为您误会了Service
Android的含义。请参阅有关服务的文档:
服务是可以在后台执行长时间运行的操作且不提供用户界面的应用程序组件。另一个应用程序组件可以启动服务,即使用户切换到另一个应用程序,它也将继续在后台运行。
另请注意:
服务在其宿主进程的主线程中运行-该服务不会创建自己的线程,也不会在单独的进程中运行(除非另行指定)。
使用工作线程和使用aService
并不互斥。
如果您希望将工作从主线程上移开,那么显然您需要使用另一个线程。通过TPLBackgroundWorker
或TPL在许多情况下都可以,但是如果您想与UI交互(例如,在完成任务或更新UI中的进度时),Android的方法是使用AsyncTask
(mono docs)。
如果这个工作需要继续与您的应用程序的用户交互之外,那么你可能想举办这项工作(包括BackgroundWorker
/ Thread
/AsyncTask
在/等)Service
。如果您要进行的工作仅在用户直接与您的应用程序交互时才有意义,则aService
是不必要的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句