Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 操作系统如何决定挂起哪些线程?_Android_Android Service_Background Service - Fatal编程技术网

Android 操作系统如何决定挂起哪些线程?

Android 操作系统如何决定挂起哪些线程?,android,android-service,background-service,Android,Android Service,Background Service,标题不好,请阅读此描述以理解我的意思 我创建了一个我想长期运行的后台服务,根据定义,即使用户切换应用程序或关闭应用程序,android上的服务也可以运行 我的问题是:android管理系统如何知道当应用程序进入后台时,哪些线程需要保留,哪些线程需要擦除,而唯一运行的是服务 默认情况下,我的服务在主线程上运行,因此当我想执行长任务时,我会: AsyncTask.THREAD\u POOL\u EXECUTOR.execute(可运行) 是这样吗?我可以使用这个由android创建的默认线程池吗?或

标题不好,请阅读此描述以理解我的意思

我创建了一个我想长期运行的后台服务,根据定义,即使用户切换应用程序或关闭应用程序,android上的服务也可以运行

我的问题是:android管理系统如何知道当应用程序进入后台时,哪些线程需要保留,哪些线程需要擦除,而唯一运行的是服务

默认情况下,我的服务在主线程上运行,因此当我想执行长任务时,我会:
AsyncTask.THREAD\u POOL\u EXECUTOR.execute(可运行)

是这样吗?我可以使用这个由android创建的默认线程池吗?或者服务必须显式创建线程,以便系统知道即使应用程序在后台运行,线程也必须存在

android管理系统如何知道当应用程序进入后台时,哪些线程需要保留,哪些线程需要擦除,而唯一运行的是服务

Android不会“擦除”任何线程。Android终止进程以释放系统RAM,而不是线程

是这样吗

我建议您使用自己的
Executor
、RxJava或Kotlin协同程序,而不要在
AsyncTask
中使用Executor。这是因为我预计
AsyncTask
有时会被弃用,因为这是“老派”


然而,除此之外,你所做的听起来不错。

你的回答很有道理,但它给我带来了一个新问题:如果android处理“进程”,那么服务和应用程序是同一个进程(因为它们共享内存和内容,我只能猜它们是同一个进程),那么如果我的应用程序长时间处于后台,但我确实让一个前台服务做了很长时间的任务,这意味着我的应用程序所占用的大部分内存仍将保留,对吗?我的意思是,所有的活动都可以取消,所有其他的事情都还可以吗?@RafaelLima:“这意味着我的应用程序分配的大部分内存仍然可以保留?”——是的,不过你可以覆盖像
ontrimmery()
这样的方法来帮助实现这一点(例如,刷新缓存)。一些应用程序专门使用两个进程:一个用于长期服务,另一个用于短期用户界面。这简化了内存管理问题,但使许多其他事情变得更加复杂,因此我不太喜欢这种方法,尽管对于某些项目来说,它会很有用。