2012-01-26 30 views
2

我的理解是,Android服务应该是单身人士 - 一次只能运行一个类实例。所以,你应该通过意图启动它们,而不是通过意图或创建实例启动Android服务

MyService mse = new MyService(); 

然而,谷歌的应用内结算样品中,这也正是他们在Dungeons.java做什么,行235所以这显然是合法的。

我想知道,如果我开始这样的服务,框架后来会认识到它正在运行?换句话说,如果我稍后尝试在同一服务上调用startService(),框架是否会识别出该服务的实例已经存在,并调用startService()调用?

回答

1

我不知道你指的是什么样的例子。但是您绝对肯定无法使用new关键字自己实例化Android组件(ActivityBroadcastReceiverService,Provider)。这些组件只能由Android框架实例化,因为框架需要设置组件的Context

有(不幸)没有任何东西阻止你写Service s = new MyService();,但它会对你没有好处。 Android将永远不会调用此Service上的任何生命周期方法,并且您对Service方法所做的任何调用可能会失败壮观,因为该实例没有Context

+1

男孩,这是一个老讨论:)我现在知道。而且我无法在最新的SDK中找到有问题的示例,所以这个问题真的没有意义。 –

0

如果您直接实例化服务而不是使用意图来保证服务将在您的活动过程中运行。如果该活动应该被杀死,那么该服务也会停止。这是一种不好的做法吗?那取决于你想要什么。如果你需要这项服务来让活动停止,那么是的,这是一件坏事。如果你不在乎,或者你的应用可以容忍这些关机,那就没关系。然而,我认为如果你需要一个后台作业运行,当你的Activity停止的时候可以停止,那么你需要使用AsyncTask而不是服务。

+0

让我们不要谈论线程/过程方面,并专注于单身性。这就是我想知道的。编辑了这个问题。 –

相关问题