2012-07-12 98 views
1

我开发,是为了获取用户的位置和当前天气信息的应用程序。在信息收集过程是这样: StartGathering - >获取经/纬度 - >获取定位数据(城市,地址等)从COORDS - >获取天气信息 - >保存在SQL数据库中的信息。 一切都是通过在包含数据的不同活动之间使用包发送字符串数组完成的。 为了准确起见,该过程每X分钟重复一次,但由于我已处理活动,所以更新过程会干扰设备上的其他应用程序。我为流程中的每个活动添加了android:theme =“@ android:style/Theme.NoDisplay”,认为这与在后台执行相同。 我想在后台收集信息并将其保存在数据库中,并且据我所知,如果不使用服务,这是不可能的。转换活动服务(机器人)

有没有办法轻松了一堆不同的活动转化为服务,从而让应用程序收集必要的信息在后台,以便用户可以使用该设备没有任何性能损失? 或者是否有可能让活动在后台执行某些工作而不干扰其他应用程序?

+0

我不知道如何从字面上做到这一点。但我想尝试开始一个异步任务,并在完成主要意图之后进行循环。我不知道它是否有效,但我只是给它一个镜头:) – Mert 2012-07-12 22:40:12

回答

3

有没有一种方法可以轻松地转换了一堆不同的活动,以服务...

否,创建一个Service(或Services)和复制/粘贴现有​​的代码。要知道,虽然该应用程序的主线程(也称为UI线程)在Service运行,所以如果有工作要做,你需要使用的工作线程或者是使用IntentService这其中确实在后台/工作线程默认工作的任何费时的工作。

或者是否可以让活动在后台执行某些工作而不干扰其他应用程序?

不,不是在路上你试图去做。将Activity想象为类似于Windows窗体(或类似的)。换句话说,它是一个允许用户与应用程序交互的UI的框架。有(使用AsyncTask例如)做后台工作在Activity的方式,但一个Activity不是一个泛型类可以隐藏起来,而它的一些“数字运算”。

+0

谢谢你的回答! 在使用服务时,我仍然可以使用相同的方法和发送/接收包吗?我是否仍然可以用相同的方式进行编程:一个服务是否做了一些工作,在它自己销毁之前,它会向另一个服务发送一个包,以便与前一个服务的其他信息做一些其他的工作? – Eric 2012-07-12 23:11:42

+0

@Eric:是的,“服务”可以启动或绑定到另一个“服务”。至于传递数据,Android广泛使用'Intents'来在应用程序的不同组件之间传递动作和传递数据。我想知道你是否真的需要多个'服务'。如果您的应用程序的“收集”过程总是要用您描述的固定步骤完成,那么为什么不在一个“服务”内完成?拥有多个“服务”的唯一原因是每个服务都执行可能直接用于其他应用程序组件的独特功能。 – Squonk 2012-07-12 23:30:08

2

从而使应用程序来收集必要的信息在后台,以便用户可以使用该设备没有任何性能损失

如果你的程序是做什么则是导致“性能损失“,可能对用户来说不显着或者不明显,但是损失仍然存在。在我看来,你正在尝试做的事情(根据你使用的间隔时间,获取位置并发出网络请求以获取与每个X分钟相关的天气信息)将导致电池相当大的耗尽。如果您不希望他们抱怨您的应用程序耗尽电池,建议您将间隔时间留给用户。

+0

我的意思是“没有任何显着的性能损失”。当我在手机上测试应用程序,并通过活动收集信息时,基本上不可能同时使用它。 当然,用户将能够配置其收集信息的频率。 – Eric 2012-07-13 00:12:01