【问题标题】:Service in a Thread vs Thread in a Service线程中的服务与服务中的线程
【发布时间】:2017-11-12 18:08:50
【问题描述】:

我正在尝试构建一个应用程序,该应用程序从传感器(加速度计和陀螺仪)获取值并将它们存储在文件中,我认为这是 CPU 密集型的。 所以我的问题是我是应该在MainActivity 中创建一个线程并启动我的服务,还是应该在我的MyService 中创建一个线程并做所有必要的事情? 我正在阅读this,它说:

如果您的服务要执行任何 CPU 密集型工作或阻塞操作,例如 MP3 播放或网络,您应该在服务中创建一个新线程来完成该工作。通过使用单独的线程,您可以降低应用程序无响应 (ANR) 错误的风险。

那么哪一个更适合我呢?

【问题讨论】:

  • 从传感器读取值并将它们存储到磁盘是 IO 密集型的,但不应该是 CPU 密集型的,除非您在存储之前处理数据。
  • 您是说从传感器读取值不会占用大量 CPU 资源吗?我也在计算用户的速度,然后再存储它(但如果我觉得设备的计算量越来越大,这也可以由服务器完成)。

标签: java android multithreading service


【解决方案1】:

据我了解您的问题,您需要在服务中管理一个线程。 正如 android 所说的 Thread

- if it is destroyed by android in middle due to low memory, then android will not guarantee to restart it again. That means user lost his half work.

所以

1> 因为如果出现意外错误,您的工作需要重新开始。所以你应该把你的线程放在服务中。如果停止,则重新启动线程。

2> 如果您将线程放入您的活动中,它将在活动结束时丢失。但在服务上却相反。服务是 android 的高优先级任务。如果它在执行其工作时被破坏,由于内存不足的情况,它会在中间被 Android 破坏。然后,如果您从onStartCommand() 返回START_STICKYSTART_REDELIVER_INTENT,android 将确保它会重新启动您的服务。

3> Thread - 不是 android 的组件,因此由于内存不足,android 在杀死应用程序时不会考虑线程优先级。

4>Service - 是 android 的一个组件,因此由于内存不足,在销毁应用程序时需要考虑优先级。

【讨论】:

  • 欢迎 Nikhil :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多