关于Android服务和线程的困惑

时间:2014-11-19 02:30:06

标签: android multithreading service

我是Android的新手,我对服务和线程的使用寿命感到非常困惑。

假设我有一个活动,它通过调用startService()在工作线程中启动服务。根据Google文档,即使调用组件被销毁,该服务也将无限期运行。

以下是我的问题: 如果应用程序进程被完全销毁(从后台退出并清除),该服务是否仍在运行? UI线程是否仍在运行?如果是,这是否意味着线程不一定被杀死,即使它的调用进程被破坏了?

3 个答案:

答案 0 :(得分:1)

1。当设备资源不足或内存不足时,系统可以停止服务

2。如果您的应用程序被强制停止(由系统任务杀手或具有root权限的某个应用程序)您的服务 除非您再次启动应用程序并重新启动服务,否则也会被破坏

3。如果您的应用程序从后台堆栈中清除或退出,您的服务不会被销毁,并且线程仍然在运行,那么此时对UI的任何更新都可能会出错

希望此信息有用

答案 1 :(得分:1)

Thread不是服务。 Service通常在清单中声明,并且具有自己的生命周期。如果未在清单中声明它,它可以超出活动的生命周期,但只有在清单中的已声明元素(即活动或其他服务)启动时才会运行。

您使用的条款没有明确区分。看看这个:

http://www.vogella.com/tutorials/AndroidBackgroundProcessing/article.html

有助于区分"线程"和#34;服务。"正如其他答案所指出的,当系统资源不足时,Servicethread都可以被销毁。但是,如果从Activity创建一个线程并正确管理其内存,则当Activity死亡时它将会死亡(因为没有对它进行引用)。如果它保留对Activity的引用,它可能不会死,但即使没有办法返回Activity也不会活动。这是一种内存泄漏,应该避免使用。

为了清楚起见,Service独立于Activity并且拥有自己的主题。一个java线程也可以,但不应该在创建它的Activity的生命周期中存活。

答案 2 :(得分:0)

服务本身不会被破坏。你需要从调用Activity调用stopself()。即使调用活动被销毁,它也不会被销毁。您可以使用IntentService,它在完成工作后会自行销毁。 IntentService Service