【问题标题】:Android Long Running Service and databaseAndroid 长期运行服务和数据库
【发布时间】:2012-02-09 16:11:16
【问题描述】:

我正在开发一个由两部分组成的程序

服务组件 将每隔预定的时间间隔(比如 15 分钟)读取各种系统功能(CPU 使用率、RAM 使用率、正在运行的任务数、发送的消息、拨打的电话等)。并将这些读数/数据保存在数据库中。

Activity组件会从SQL数据库文件中读取数据并进行处理。

我的问题是

  1. 我必须创建什么样的服务才能永远保持活动状态,直到被活动停止它也应该在系统重新启动后自动重新启动?

  2. 有人有将数据写入数据库的服务示例吗?

  3. 我可以从服务中调用父活动吗?

【问题讨论】:

  • 哦,你真的需要接受一些答案,然后才会有人阅读你的问题
  • 我几天前才获得标记答案的权限。你能指导我回答我没有接受正确答案的问题吗

标签: android android-service android-activity


【解决方案1】:

听起来像是一个相当标准的Service。阅读Service lifecycle

答案:

  1. 任何服务都可以。您需要一个 BroadcastReceiver 来侦听 BOOT_COMPLETED 意图以在启动时启动服务。
  2. Service 对象是 Context 对象,因此您可以使用 SQLite 数据库执行您可以从 Activity 执行的任何操作。没有区别。
  3. 定义“调用”和“父活动”。您可以通过Context 中的标准startActivity() 方法从服务中启动Activity。如果你在启动时从BroadcastReceiver 启动Service,它是一个独立的服务,没有连接到任何Activity,所以没有父Activity

另请注意,Service 对于您声明的意图可能不是绝对必要的。如果您只是不经常做的事情,您可以通过AlarmManager 警报来解决问题。这样你就不会让Service 运行——并消耗资源——因为你每 15 分钟才处理一次。

【讨论】:

  • Parent-activity 是我的程序的活动组件,它将启动服务...根据您的 cmets,我可以假设我可以通过 AlarmManager 在一定时间间隔后自动启动我的活动。我有从系统中读取各种功能。是否可以从活动中完成所有这些操作而不会出现 ANR(应用程序无响应)错误?
  • 是的,AlarmManager 能够启动任何事情。并且您是否获得 ANR 与您如何实现 Service 的启动无关。 Service 在同一进程中运行,并且在任何Activity 的主线程中运行。如果您因为 Service 处理而收到 ANR,则需要将该处理拆分为不同的 Thread
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多