Android 操作系统如何决定挂起哪些线程?
标题不好,请阅读此描述以理解我的意思 我创建了一个我想长期运行的后台服务,根据定义,即使用户切换应用程序或关闭应用程序,android上的服务也可以运行 我的问题是:android管理系统如何知道当应用程序进入后台时,哪些线程需要保留,哪些线程需要擦除,而唯一运行的是服务 默认情况下,我的服务在主线程上运行,因此当我想执行长任务时,我会:Android 操作系统如何决定挂起哪些线程?,android,android-service,background-service,Android,Android Service,Background Service,标题不好,请阅读此描述以理解我的意思 我创建了一个我想长期运行的后台服务,根据定义,即使用户切换应用程序或关闭应用程序,android上的服务也可以运行 我的问题是:android管理系统如何知道当应用程序进入后台时,哪些线程需要保留,哪些线程需要擦除,而唯一运行的是服务 默认情况下,我的服务在主线程上运行,因此当我想执行长任务时,我会: AsyncTask.THREAD\u POOL\u EXECUTOR.execute(可运行) 是这样吗?我可以使用这个由android创建的默认线程池吗?或
AsyncTask.THREAD\u POOL\u EXECUTOR.execute(可运行)代码>
是这样吗?我可以使用这个由android创建的默认线程池吗?或者服务必须显式创建线程,以便系统知道即使应用程序在后台运行,线程也必须存在
android管理系统如何知道当应用程序进入后台时,哪些线程需要保留,哪些线程需要擦除,而唯一运行的是服务
Android不会“擦除”任何线程。Android终止进程以释放系统RAM,而不是线程
是这样吗
我建议您使用自己的Executor
、RxJava或Kotlin协同程序,而不要在AsyncTask
中使用Executor。这是因为我预计AsyncTask
有时会被弃用,因为这是“老派”
然而,除此之外,你所做的听起来不错。你的回答很有道理,但它给我带来了一个新问题:如果android处理“进程”,那么服务和应用程序是同一个进程(因为它们共享内存和内容,我只能猜它们是同一个进程),那么如果我的应用程序长时间处于后台,但我确实让一个前台服务做了很长时间的任务,这意味着我的应用程序所占用的大部分内存仍将保留,对吗?我的意思是,所有的活动都可以取消,所有其他的事情都还可以吗?@RafaelLima:“这意味着我的应用程序分配的大部分内存仍然可以保留?”——是的,不过你可以覆盖像ontrimmery()
这样的方法来帮助实现这一点(例如,刷新缓存)。一些应用程序专门使用两个进程:一个用于长期服务,另一个用于短期用户界面。这简化了内存管理问题,但使许多其他事情变得更加复杂,因此我不太喜欢这种方法,尽管对于某些项目来说,它会很有用。