new Thread(new Runnable(){
@Override
public void run () {
Intent firstServiceIntent=new Intent(getApplicationContext(),MyService.class);
}
}).start();
我必须在服务中执行后台位置更新。我在服务中使用了LocationListner,它经常调用onLocationChanged(),这可以阻止我的UI线程。如果我在onLocationChanged()中使用create thread,那么每次调用此方法时都会生成一个新线程。所以,我正在考虑在新线程中创建整个服务,而不是在onLocationChanged()中创建线程。这是一个很好的解决方案还是应该是最好的方法?任何帮助表示赞赏。
答案 0 :(得分:1)
服务在其托管过程的主线程中运行;除非另外指定,否则该服务不会创建自己的线程,也不会在单独的进程中运行。
但是,从不同的线程启动服务看起来很丑陋。您可以在服务中创建新线程。
答案 1 :(得分:1)
如果您希望服务在后台线程上运行,那么您有两个选择:
使用Android操作系统自动在后台线程上运行的IntentService
。您在IntentService
内执行的所有操作都将在后台线程上运行。您无需进行任何线程化。
使用标准Android Service
并在要执行工作的服务中实例化new Thread()
。标准Android Service
默认在主线程上运行,因此它将阻止您的UI。这就是你必须自己处理线程的原因。
更多信息: Android Services
答案 2 :(得分:0)
如果您使用的是Android的IntentService
组件,它会自动处理onHandleIntent(...)
您可以尝试的后台处理...
class YourService extends IntentService
否则,如果您使用Service
class YourService extends Service
您可以在onCreate()
<强> ELSE 强>
该服务将在MainThread