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

Java 线程中的服务与服务中的线程,java,android,multithreading,service,Java,Android,Multithreading,Service,我正在尝试构建一个应用程序,它从传感器(加速计和陀螺仪)获取值,并将它们存储在文件中,我认为这是CPU密集型的。 所以我的问题是我应该在MainActivity中创建一个线程并启动我的服务,还是应该在MyService中创建一个线程并执行所有必要的操作? 我在读,上面写着: 如果您的服务要执行任何CPU密集型工作或阻塞操作,如MP3播放或联网,您应该在服务中创建一个新线程来完成该工作。通过使用单独的线程,可以降低应用程序不响应(ANR)错误的风险 那么哪一个对我来说是更好的选择呢?我很理解你的问

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

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


那么哪一个对我来说是更好的选择呢?

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

- 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\u STICKY
START\u REDELIVER\u INTENT
,android将确保它将重新启动您的服务

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


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

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