我是Android的新手,我对服务和线程的生命周期感到很困惑。
假设我有一个活动,它通过调用startService()在工作线程中启动服务。根据谷歌文档,即使调用组件被破坏,该服务也将无限期运行。
所以我的问题是:如果应用程序进程被完全销毁(退出并从后台堆栈中清理),服务是否仍在运行?UI线程是否仍在运行?如果是,这是否意味着即使其调用进程被破坏,线程也不一定会被终止?
服务不会自行销毁。您需要从调用活动调用停下来()。即使调用活动被销毁,它也不会被销毁。相反,您可以使用IntentService,它在完成工作后会自我销毁。意向服务
一个Thread
不是一个服务。Service
通常在清单中声明,并具有自己的生命周期。当它没有在清单中声明时,它可以在活动的生命周期之外运行,但它只有在通过清单中声明的元素(即活动或其他服务)启动时才会运行。
您使用的术语没有明确区分。看看这个:
http://www.vogella.com/tutorials/AndroidBackgroundProcessing/article.html
它有助于区分“线程”和“服务”正如在其他答案中指出的,当系统资源不足时,服务
和线程
都可能被销毁。但是,如果一个线程是从一个活动创建的,并且正确地管理了它的内存,那么当该活动终止时,它将终止(因为没有对它的引用)。如果它保留对活动的引用,它可能不会消亡,但即使无法返回活动,活动也不会消亡。这是一种内存泄漏,应该避免。
需要明确的是,
服务
独立于活动
运行,并且有自己的线程。java线程也可以,但不应该在创建它的活动
的生命周期内生存。
1.当设备资源不足或内存不足时,系统可以停止服务
2.如果您的应用程序被强制停止(由系统任务杀手或具有root权限的某些应用程序停止),则您的服务也将被销毁,除非您再次启动应用程序并重新启动服务
3.若你们的应用程序被从后台清理或退出,你们的服务并没有被破坏,线程仍在运行,那个么在这段时间内对UI的任何更新都可能出错
希望这些信息有帮助
我需要的是,我将在端口(本地机器)中打开一个服务器监听,并且可以向我发送数据包。我的计算机没有。基本上我需要。 我正在测试服务器/客户端项目。我在服务器(公共ip)中运行stuntman-server。在我的系统中运行客户端(本地ip)。我要求为端口提供映射IP/端口。 Stun服务器返回IP和端口。然后,我在本地系统中打开一个服务器(使用java),并开始侦听端口,并将一个消息从发送到stun服
所以我试图从另一个类开始一个服务类。这里是代码... 当上面的代码运行时,我的服务类在后台运行,而我被带回ujk类(这完全没问题)。在abcservice类中的onStart(Intent意图,int starId)方法内部,我正在以以下方式运行一个线程... 下面是onDestroy()方法。。 现在在日志中我得到以下输出。。。 我的疑问是... 1.这是正确的输出吗?我的意思是,如果服务在线程
问题内容: 我对线程安全性有疑问。据我所知,SimpleDateFormat不是线程安全的。我想知道如果在spring控制器中以以下方式使用它会产生什么影响: 稍后在我的控制器功能中,我将其如下使用: 然后将calcDate添加到我的模型对象中,并返回ModelAndView。 那么用这种方式我会看到什么样的问题呢?是否只需删除static关键字即可解决任何问题,因为每个线程将使用其自己的date
因此,将此运算符放在链中的任何位置也会影响onnext/onerror/oncomplete信号的执行*上下文,从链的开始直到下一次出现{@link publishOn(Scheduler)publishOn} 这让我有点困惑,因为当处理链中没有指定任何时,线程名称的打印值为: 从线程single-scheduler-1中保存person-如预期 从线程线程-13查找人员 从线程线程-6查找人员
我的应用程序目前使用一个后台服务与一个物理设备进行通信(蓝牙)。(我制造并销售物理设备。)应用程序每500ms向设备发送一条命令。用户启动这个进程,它必须运行,直到用户停止它。当应用程序处于活动状态时,进程的结果将发送到应用程序。这个过程需要运行,即使应用程序不是活动的。(例如,他们打电话,搜索网络。)一旦应用程序再次激活,进程的状态将与应用程序同步。该过程可以在任何地方运行,从几分钟到几个小时不
问题内容: Docker菜鸟在这里,尝试使用Compose设置一个简单的Django项目。过,我已经在此方面取得了成功,但是这次我正在尝试一种不同的设置,但我不知道为什么它不起作用。 我有以下docker-compose.yml文件: 我的/ Dockerfile是: 我的/ docker / web / Dockerfile是: 我的/docker/web/default.conf文件是: do