Android 从活动开始在新线程中启动服务是一件好事吗
我必须在服务中执行后台位置更新。我在服务中使用过LocationListner,它经常调用onLocationChanged(),这会阻塞我的UI线程。如果在onLocationChanged()中使用create thread,则每次调用此方法时都会生成一个新线程。因此,我考虑在新线程中创建整个服务,而不是在onLocationChanged()中创建线程。这是一个好的解决方案还是最好的方法?非常感谢您的帮助。服务在其宿主进程的主线程中运行;除非您另行指定,否则服务不会创建自己的线程,也不会在单独的进程中运行Android 从活动开始在新线程中启动服务是一件好事吗,android,service,locationlistener,Android,Service,Locationlistener,我必须在服务中执行后台位置更新。我在服务中使用过LocationListner,它经常调用onLocationChanged(),这会阻塞我的UI线程。如果在onLocationChanged()中使用create thread,则每次调用此方法时都会生成一个新线程。因此,我考虑在新线程中创建整个服务,而不是在onLocationChanged()中创建线程。这是一个好的解决方案还是最好的方法?非常感谢您的帮助。服务在其宿主进程的主线程中运行;除非您另行指定,否则服务不会创建自己的线程,也不会在
然而,从不同的线程启动服务看起来很难看。您可以在服务中创建一个新线程。如果您使用的是android的
IntentService
组件,它将自动在OnHandleContent(…)中处理您的后台处理。
您可以尝试
new Thread(new Runnable(){
@Override
public void run () {
Intent firstServiceIntent=new Intent(getApplicationContext(),MyService.class);
}
}).start();
否则,如果您使用服务
如
class YourService extends IntentService
您可以在onCreate()中使用自定义线程
其他
该服务将在主线程中运行
如果您希望您的服务在后台线程上运行,那么您有两个选项:
使用安卓操作系统在后台线程上自动运行的IntentService
。在IntentService
中执行的所有操作都将在后台线程上运行。你不需要做任何线程
使用标准安卓服务
,并在要执行工作的服务内实例化一个新线程()。标准的安卓服务
默认在主线程上运行,因此它将阻止您的UI。这就是为什么你必须自己处理线程
更多信息请点击此处:
当我在活动和服务中尝试Thread.currentThread().getId()时,两者都产生了相同的id。因此我发现它们在同一个线程中工作,这是我不想要的。如果我错了,请纠正我。您使用的是哪种服务IntentService
?Service
是一个组件,那么为什么要从后台线程启动它呢?最终,Service
将在主线程上运行。在线程中启动服务不会在线程中运行服务。所以这没有意义。@Gabeschen这是有道理的。。谢谢:)
class YourService extends Service