Tra*_*ott 4 service android instance
我还是Android服务类的新手.我知道你需要使用startService(intent)从应用程序启动服务,但是我的问题是我的服务里面有方法.我需要以intent开始服务,然后在Activity中创建该类的对象,以便我可以调用该服务的方法.问题是当我这样做时,当我在我的活动中创建类的对象时,当我使用intent和另一个服务实例启动它时,我创建了一个服务实例.这意味着当我创建服务的对象时,从startService(intent)传递给服务的任何数据都不存在.有什么方法可以解决这个问题,还是我完全滥用服务类?我可以提供一些代码,但基本上这个:
//Create Object of ControlPanel service class.
ControlPanel cPanel = new ControlPanel();
//Create intent for starting ControlPanel service class
Intent controlPanel = new Intent(this, cPanel.getClass());
//Start Service
startService(controlPanel);
Run Code Online (Sandbox Code Playgroud)
fed*_*aol 15
我会说你在滥用这门课:-).
多次调用startService()不会导致启动多个服务.
来自doc:
请求启动给定的应用程序服务.Intent可以包含要启动的特定服务实现的完整类名,也可以包含通过操作的抽象定义以及要启动的服务类型的其他字段.如果此服务尚未运行,它将被实例化并启动(如果需要,为其创建一个进程); 如果它正在运行,那么它仍然在运行.
您也应该覆盖onStartCommand().如果尚未启动,则第一个startService调用将启动该服务.在任何情况下,onStartCommand都会拦截任何进一步的startService调用以及要发送给它的intent.
有什么方法可以解决这个问题,还是我完全滥用服务类?
你完全滥用了这Service门课.
A Service通过两种基本模式使用:
通过发送命令给它startService().
绑定到它,调用由暴露的API Service,通过bindService().
绑定更准确地描述了您正在尝试做的事情("所以我可以调用服务的方法"),但是绑定很难做到正确,特别是在配置更改时.
因此,我建议您先坐下来,确切地确定您为什么首先使用a Service.ControlPanel例如,我是一个与UI关联的名称,而不是无UI("背景")操作.然后,只有这样才能确定命令或绑定模式是否适合您的用例.