我从Activity(活动A)创建了一个服务(服务B)。从服务B,我创建了另一个服务(服务C)。以前服务C曾经是一个线程而不是一个服务。由于长期存在问题,我将其改为服务。服务C运行一个带有3秒Thread.sleep调用的while循环。但一般情况下它并没有停止。日志显示服务正在运行。但UI被阻止,几分钟后系统会问我是否要关闭。
如何使此服务无阻塞通话?
答案 0 :(得分:3)
来自Android中的服务文档
服务不是一个单独的过程。 Service对象本身并不意味着它在自己的进程中运行;除非另有说明,否则它与其所属的应用程序运行的过程相同。
服务不是线程。它不是从主线程开始工作的手段(以避免应用程序无响应错误)。
在这种情况下,最好的方法是启动一个新线程,然后从那里调用服务。
答案 1 :(得分:2)
我认为服务C正在主线程上运行,尝试创建另一个线程(新线程或asynctask)
答案 2 :(得分:2)
是的,从文档中可以看出,服务不是单独的流程。 相反,请按照以下方式使其正常工作:
因此,如果你在服务中使用覆盖onCreate方法,它将检查服务是否已经运行,如果它没有运行,它将启动服务。否则它将跳过并且不会启动另一项服务。
答案 3 :(得分:0)
服务始终在主线程上运行。
您需要在服务C中生成后台线程或重复运行TimerTask
等,以避免阻塞UI线程。