据我了解,Android服务应该是单例的-一次运行的类实例不超过一个。因此,您应该通过意图来启动它们,而不是通过

MyService mse = new MyService();


但是,在Google的应用内结算示例中,这正是他们在Dungeons.java,第235行中所做的。因此,这显然是合法的。

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

最佳答案

我不知道您指的是什么例子。但是您绝对不能使用Activity关键字自己实例化Android组件(BroadcastReceiverServiceProvidernew)。这些组件只能由Android框架实例化,因为该框架需要设置组件的Context

(不幸的是)没有什么阻止您编写Service s = new MyService();,但这对您没有好处。 Android永远不会在此Service上调用任何生命周期方法,并且您对Service方法进行的任何调用都可能会失败,因为该实例没有Context

09-25 22:24
查看更多