android服务持久化

Posted

技术标签:

【中文标题】android服务持久化【英文标题】:android service persistent 【发布时间】:2010-10-10 10:27:32 【问题描述】:

在我的应用程序中,我实现了一个远程服务,它每 20 分钟与网络服务器交换一次数据,并修改 MyApplication 类中扩展 Application 的某些对象的值。

12 或 15 小时后,android 会杀死 MyApplication 类和/或我的服务。 我试图实现

android:alwaysRetainTaskState="true"

没有结果。有些人可以向我解释如何使服务或应用程序在 android 中持久化?我看到更多应用程序在后台停留数天没有问题,但我不知道该怎么做。

我知道如果每个应用程序需要一些空闲内存,Android 可能会杀死它,但我的系统有 180mb 的空闲内存并且没有应用程序在运行,因为我用它来测试我的程序。

【问题讨论】:

【参考方案1】:

有人可以向我解释如何使服务或应用程序在 android 中持久化?

你没有。您编写的应用程序不需要一直在内存中。

在我的应用程序中,我实现了一个远程服务,它每 20 分钟与网络服务器交换一次数据,并修改 MyApplication 类中扩展 Application 的某些对象的值。

请使用AlarmManagerIntentService,这样您的服务不需要在内存中,除非它正在做有意义的工作。这也意味着 Android 不太可能在您在内存中时终止您的服务,用户也不太可能因为认为您在浪费内存而终止您的服务。

【讨论】:

感谢大家的回复。所以我必须扩展 IntentService 而不是服务?我将使用 AlarmManager 而不是 TimerTask。对吗?另一个问题:当我使用警报管理器时,服务每 20 分钟启动一次? 很抱歉,如果我发布另一个问题,但我无法编辑之前的帖子。如果服务不在内存中,应用程序类是否相同。所以我必须将我的对象和变量保存在文本文件中或作为共享首选项?再次感谢 @zerocool87:“所以我必须扩展 IntentService 而不是 Service?” -- 这是AlarmManager 的典型特征。 “我将使用 AlarmManager 而不是 TimerTask。对吗?” - 是的。 “当我使用警报管理器时,服务每 20 分钟启动一次?” -- 我会让用户选择频率,否则它可以是任何你想要的。 “。所以我必须将我的对象和变量保存在文本文件中或作为共享首选项吗?” -- 是的,您的状态需要在文本文件、共享偏好、数据库或其他内容中。 我以 20 分钟为例 :) 所以我必须将服务实现为 IntentService 并使用 alarmManger 每 20 或 30 分钟唤醒一次服务。这样我可以从活动中唤醒服务吗?我不明白,如果使用警报管理器,服务是否会停止并重新启动,或者只是“休眠”。谢谢你的回复 @zerocool87:“这样我可以从活动中唤醒服务吗?” ——没有活动。 “我不明白,如果使用警报管理器,服务会停止并重新启动,还是只是“休眠”。” -- 服务停止。 IntentService 对命令模式进行操作,从 startService() 中获取一个 Intent,将其传递给后台线程和 onHandleIntent(),然后在工作完成后自动关闭。

以上是关于android服务持久化的主要内容,如果未能解决你的问题,请参考以下文章

Android服务被杀死[重复]

Android上持久移动连接的最佳实践?

android端口号选择上的持久TCP连接?

Android 上的持久 HttpURLConnections

Android 应用持久认证

Android 面试题总结