我一直在网上搜索几个小时。我正在尝试创建一个具有UI界面和服务的应用程序,在后台运行SIP电话通信,有点像Skype。
UI基于UI事件启动和停止服务,并且服务保持在后台使用Internet服务器登录。我发现很多文章谈论在单独的线程(完成)上运行服务,使用startService而不是绑定服务(完成),但每当我使用任务管理器以用户身份杀死应用程序时,我会收到一个错误弹出窗口说我的应用程序崩溃了,服务不再运行。
Skype,Facebook或电子邮件客户端等程序如何做到这一点?
我是否必须使用隐式意图将它们作为单独的应用程序运行?
除了声明服务及其名称外,我是否需要在清单文件中设置一些设置?
更好的是,是否有使用此类服务的某个页面或源示例的链接?
编辑:对不起,我想我不清楚。服务正在停止,我不想要它。即使用户使用应用程序管理器杀死了应用程序,我也试图让服务在后台运行。答案 0 :(得分:0)
Service
更令人困惑的一个问题是,默认情况下,不在单独的线程中运行。调用startService()
而不是bindService()
在这方面没有任何区别。但是,binder机制将导致在任意线程上下文中调用Service
公开的方法。在这两种情况下,您的Service
都是您申请流程的一部分。如果您通过任务管理器终止它或它崩溃,那么Service
也会死亡。
当您通过任务管理器终止应用程序并弹出有关应用程序死亡的消息时,您会出现行为异常。检查logcat,它会指向崩溃发生的确切位置。
如果您需要让Service
运行,无论用户界面如何,那么当您的用户界面退出时,请不要停止Service
。当您的UI开始重新连接(并可能重新启动)时,您仍然会调用startService()
,但除非您真的希望它停止,否则不要停止它。开始时不要"堆叠"。如果某些电话开始5x,则不会停止5次停止Service
,只有1次。