线程中的服务与服务中的线程

时间:2017-11-12 18:08:50

标签: java android multithreading service

我正在尝试构建一个应用程序,它从传感器(加速度计和陀螺仪)获取值并将它们存储在文件中,我认为这些文件是CPU密集型的。 所以我的问题是我是否应该在dict1 = {'UN':'Unknown','VP':'Very Poor','PO':'Poor','MO':'Moderate', 'GO':'Good','VG':'Very Good','EX':'Excellent'} block1_v = json_data["SiteRep"]["DV"]["Location"]["Period"][1]["Rep"][0]["V"] visib.append(dict1[block1_v]) 中创建一个帖子并启动我的服务,还是应该在我的MainActivity 中创建一个帖子并完成所有必需品? 我正在阅读this并说:

  

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

那么对我来说哪一个更好?

1 个答案:

答案 0 :(得分: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中间。然后,如果您从START_STICKY返回START_REDELIVER_INTENTonStartCommand(),则Android会确保它会重新启动您的服务。

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

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