我从Activity A创建了一个服务(service B),而从service B,我又创建了另一个服务(service C)。以前,服务C是一个线程而不是一个服务,因为长期运行会出现问题,所以我将其改成了一个服务。服务C使用一个while循环,并且每隔3秒进行一次Thread.sleep调用。但通常情况下,它不会停止。日志显示服务正在运行,但UI被阻塞,几分钟后系统会询问我是否要关闭它。
如何使此服务不阻塞呢?
如何使此服务不阻塞呢?
根据文档,服务并不是独立的进程。因此,请按照以下步骤操作以使其正常工作:
因此,如果你使用服务中的 override onCreate 方法,它将检查服务是否已经运行,如果没有运行,则启动服务。否则,它将跳过并不会启动另一个服务。
从Android的服务文档中得知:
服务不是一个独立的进程。服务对象本身并不暗示它在自己的进程中运行;除非另有规定,否则它将在与其所属应用程序相同的进程中运行。
服务不是线程。它本身不是在主线程之外执行工作的手段(以避免应用程序未响应错误)。
在这种情况下最好的方法是启动一个新线程,然后从那里调用服务。
服务始终在主线程上运行。
您需要在服务C中生成后台线程或重复运行TimerTask
等,以避免阻塞UI线程。
您可以像这样在单独的线程中启动您的服务:
Thread newThread = new Thread(){
Intent serviceIntent = new Intent(getApplicationContext(), YourService.class);
getApplicationContext().startService(serviceIntent);
};
newThread.start();