2

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

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

4

2 回答 2

3

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

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

或者活动是否有可能在不干扰其他应用程序的情况下在后台做一些工作?

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

于 2012-07-12T22:53:02.477 回答
2

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

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

于 2012-07-13T00:05:16.750 回答