从活动开始在新线程中提供服务是一件好事

时间:2018-03-18 17:34:26

标签: android service locationlistener

new Thread(new Runnable(){
            @Override
            public void run () {
                Intent firstServiceIntent=new Intent(getApplicationContext(),MyService.class);
            }
        }).start();

我必须在服务中执行后台位置更新。我在服务中使用了LocationListner,它经常调用onLocationChanged(),这可以阻止我的UI线程。如果我在onLocationChanged()中使用create thread,那么每次调用此方法时都会生成一个新线程。所以,我正在考虑在新线程中创建整个服务,而不是在onLocationChanged()中创建线程。这是一个很好的解决方案还是应该是最好的方法?任何帮助表示赞赏。

3 个答案:

答案 0 :(得分:1)

服务在其托管过程的主线程中运行;除非另外指定,否则该服务不会创建自己的线程,也不会在单独的进程中运行。

但是,从不同的线程启动服务看起来很丑陋。您可以在服务中创建新线程。

答案 1 :(得分:1)

如果您希望服务在后台线程上运行,那么您有两个选择:

  1. 使用Android操作系统自动在后台线程上运行的IntentService。您在IntentService内执行的所有操作都将在后台线程上运行。您无需进行任何线程化。

  2. 使用标准Android Service并在要执行工作的服务中实例化new Thread()。标准Android Service默认在主线程上运行,因此它将阻止您的UI。这就是你必须自己处理线程的原因。

  3. 更多信息: Android Services

答案 2 :(得分:0)

如果您使用的是Android的IntentService组件,它会自动处理onHandleIntent(...)您可以尝试的后台处理...

  class YourService extends IntentService

IntentService

否则,如果您使用Service

  class YourService extends Service

您可以在onCreate()

中使用自定义主题

<强> ELSE

该服务将在MainThread

中运行

Service