将活动转换为服务(android)

时间:2012-07-12 22:34:33

标签: android eclipse service android-activity

我正在开发一个应用程序,旨在获取有关用户位置和当前天气的信息。信息以这种方式收集: StartGathering - >得到lat / long - >从coords获取位置数据(城市,地址等) - >获取天气信息 - >在SQL数据库中保存信息。 一切都是通过在包含数据的不同活动之间使用bundle发送字符串数组来完成的。 为了准确起见,每隔X分钟重复一次该过程,但由于我使用过活动,因此更新过程会干扰设备上的其他应用程序。我为这个过程中的每个活动添加了android:theme =“@ android:style / Theme.NoDisplay”,认为这与在后台执行相同。 我希望在后台收集信息并将其保存在数据库中,据我所知,如果不使用服务,这是不可能的。

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

2 个答案:

答案 0 :(得分:3)

  

有没有办法轻松地将一堆不同的活动转换为服务......

不,创建一个Service(或Services)并复制/粘贴现有​​代码。请注意,Service在应用程序的主线程(也称为UI线程)上运行因此,如果要完成任何耗时的工作,您将需要使用工作线程,或者使用IntentService,默认情况下它会在后台/工作线程上工作。

  

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

不,不是你试图这样做的方式。可以认为Activity类似于Windows窗体(或类似)。换句话说,它是一个允许用户与应用程序交互的UI框架。有一些方法可以在Activity中进行后台工作(例如,使用AsyncTask),但Activity不是一个通用类,它可以被隐藏起来,同时它可以进行一些“数字运算”

答案 1 :(得分:2)

  

从而允许应用程序在后台收集必要的信息,以便用户可以使用该设备而不会造成任何性能损失

如果您的程序正在执行任何,那么您正在导致“性能损失”,可能对用户来说可能不显着或不显着,但仍然会丢失。在我看来,你想要做的事情(获取位置并发出网络请求以每隔X分钟获取与位置相关的天气信息)将导致电池消耗非常大,具体取决于您使用的间隔时间。如果您不希望他们抱怨您的应用耗尽电池,我建议您将间隔时间留给用户。