[英]Starting Android services by intent vs. by instance creation
据我了解,Android服务应该是单例的-一次运行的类实例不超过一个。 因此,您应该通过意图来启动它们,而不是通过
MyService mse = new MyService();
但是,在Google的应用内结算示例中,这正是他们在Dungeons.java,第235行中所做的。因此,这显然是合法的。
我想知道,如果我启动这样的服务,框架以后是否会认识到它正在运行? 换句话说,如果稍后尝试在同一服务上调用startService(),框架是否会识别出该服务的实例已经存在并向其分派startService()调用?
我不知道您指的是什么例子。 但是,您绝对不能使用new
关键字自己实例化Android组件( Activity
, BroadcastReceiver
, Service
, Provider
)。 这些组件只能由Android框架实例化,因为该框架需要设置组件的Context
。
(不幸的是)没有什么阻止您编写Service s = new MyService();
,但这对您没有好处。 Android永远不会在此Service
上调用任何生命周期方法,并且您对Service
方法进行的任何调用都可能因实例没有Context
失败,而且会失败。
如果您直接实例化服务而不是使用意图来确保服务将在您的“活动”流程中运行,则请实例化该服务。 如果该活动被终止,则服务也将中断。 这是不好的做法吗? 好吧,这取决于您想要什么。 如果您需要该服务来维持可能的活动关闭,那是一件坏事。 如果您不在乎或您的应用程序可以容忍这些关机,那就可以了。 但是,我认为如果您需要运行可以在Activity停止时停止的后台作业,那么您需要使用AsyncTask而不是服务。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.