据我了解,Android服务应该是单例的-一次运行的类实例不超过一个。因此,您应该通过意图来启动它们,而不是通过
MyService mse = new MyService();
但是,在Google的应用内结算示例中,这正是他们在Dungeons.java,第235行中所做的。因此,这显然是合法的。
我想知道,如果我启动这样的服务,框架以后是否会认识到它正在运行?换句话说,如果稍后尝试在同一服务上调用startService(),框架是否会识别出该服务的实例已经存在并向其分派startService()调用?
最佳答案
我不知道您指的是什么例子。但是您绝对不能使用Activity
关键字自己实例化Android组件(BroadcastReceiver
,Service
,Provider
,new
)。这些组件只能由Android框架实例化,因为该框架需要设置组件的Context
。
(不幸的是)没有什么阻止您编写Service s = new MyService();
,但这对您没有好处。 Android永远不会在此Service
上调用任何生命周期方法,并且您对Service
方法进行的任何调用都可能会失败,因为该实例没有Context
。