Android 一个总是在安卓系统上的服务从来都不是一个反模式吗?

Android 一个总是在安卓系统上的服务从来都不是一个反模式吗?,android,android-service,Android,Android Service,我理解为什么总是在线的服务在Android中通常是一种反模式,但我的应用程序似乎真的在乞求一种: 在第一次加载时,应用程序必须通过数据库中潜在的数千个小实体来构建初始状态。内存中没有太多的数据(大部分是延迟加载的),但由于应用程序的性质,第一次扫描是不可避免的。使用较慢的硬件和较大的数据集,此扫描最长可能需要6-7秒,平均时间大约为3秒。该应用程序是一种“短时间内的脉冲使用”类型的东西,因此这些重复加载确实是不可取的 我认为这要求后台服务永远处于活动状态并保持该状态,从而避免加载时间。它将随时准

我理解为什么总是在线的服务在Android中通常是一种反模式,但我的应用程序似乎真的在乞求一种:

在第一次加载时,应用程序必须通过数据库中潜在的数千个小实体来构建初始状态。内存中没有太多的数据(大部分是延迟加载的),但由于应用程序的性质,第一次扫描是不可避免的。使用较慢的硬件和较大的数据集,此扫描最长可能需要6-7秒,平均时间大约为3秒。该应用程序是一种“短时间内的脉冲使用”类型的东西,因此这些重复加载确实是不可取的

我认为这要求后台服务永远处于活动状态并保持该状态,从而避免加载时间。它将随时准备被杀死,而不是在前台,因此,如果系统或用户决定他们为服务而使用它,则不会造成任何伤害。但如果该服务不受干扰,应用程序将立即启动,在我看来,这对用户体验有很大帮助

我还是错了吗?

一个“始终开启”的服务本质上就像一个守护进程,安卓手机上有很多服务从未关闭过

不过,在这种情况下,似乎更好的解决方案是简单地设置一个启动屏幕和/或等待对话框,直到加载数据。在我看来,在应用程序未运行时占用资源是个坏主意,这样当用户最终打开应用程序时,应用程序的加载速度就会更快。如果应用程序的平均使用量远小于加载时间,那么在某种程度上加快扫描速度可能会更好。

一个“始终开启”的服务本质上就像一个守护进程,Android手机上有大量永不关闭的服务


不过,在这种情况下,似乎更好的解决方案是简单地设置一个启动屏幕和/或等待对话框,直到加载数据。在我看来,在应用程序未运行时占用资源是个坏主意,这样当用户最终打开应用程序时,应用程序的加载速度就会更快。如果应用程序的平均使用量远小于加载时间,那么以某种方式加快扫描速度可能会更好。

人们使用TaskKiller终止此类服务。我的观点是,当你让用户知道你的服务为什么在运行时(比如说,这会更快地加载应用程序),他会理解而不是杀死它。当然,您也可以添加一个选项来使用或不使用该服务。

人们使用TaskKiller来终止此类服务。我的观点是,当你让用户知道你的服务为什么在运行时(比如说,这会更快地加载应用程序),他会理解而不是杀死它。当然,您也可以添加一个选项来使用或不使用该服务

我认为这要求后台服务永远处于活动状态并保持该状态,从而避免加载时间

正如英国人所说,胡说八道

在第一次加载时,应用程序必须通过数据库中潜在的数千个小实体来构建初始状态

那就把它修好。要么简化这项工作,要么以更简单的形式保留初始状态以供以后重用(例如JSON)

如果可以使用保存在RAM中的该工作的缓存结果,则可以使用保存在更易于读取的持久数据结构中的该工作的缓存结果

我认为这要求后台服务永远处于活动状态并保持该状态,从而避免加载时间

正如英国人所说,胡说八道

在第一次加载时,应用程序必须通过数据库中潜在的数千个小实体来构建初始状态

那就把它修好。要么简化这项工作,要么以更简单的形式保留初始状态以供以后重用(例如JSON)


如果您可以使用保存在RAM中的此工作的缓存结果,那么您可以使用保存在更易于读取的持久数据结构中的此工作的缓存结果。

我想我只留下答案。我误解了这个问题,但我认为它仍然有效。在我看来,只有当应用程序绝对需要它,用户总是知道它的存在,并且处理速度很低时,“总是在线”服务才是好的。我想我还是留下答案吧。我误解了这个问题,但我认为它仍然有效。在我看来,只有当应用程序绝对需要它,用户总是知道它的存在,并且处理速度很低的时候,“总是在线”服务才是好的。启动扫描完成后,还要将保存在内存中的结果存储在非易失性位置(或在onPause中执行此操作)。如果应用程序被销毁并重新创建,则不应对缓存的扫描结果是否有效或是否需要替换为新扫描的决定产生任何影响-这需要逻辑,但不应取决于活动生命周期。我想到了这种方法,但有一件事我忘了提到,初始状态的计算取决于当天,我不知道用户下一次何时打开应用程序。比如说,我可以计算未来5天的状态(可能需要一段时间),或者使用alarm manager每天唤醒服务并计算状态。不管怎样,解决方案都比让服务闲置要复杂得多,我在自己的设备上看到了大量的谷歌服务,这让我觉得这并不像某些人想象的那么糟糕。@tempy:“或者每天使用报警管理器唤醒服务并计算状态”——这似乎是一个很好的解决方案,类似于使用cron作业在Web服务器上静态生成内容,而不是在每次请求时动态生成内容。“这让我觉得它并不像某些人所说的那么糟糕”——如果这是你的态度,我们诚挚地邀请你停止为Android开发。如果你是