代码之家  ›  专栏  ›  技术社区  ›  Deepika Rajani

在活动的新线程中启动服务是件好事吗

  •  2
  • Deepika Rajani  · 技术社区  · 7 年前
    new Thread(new Runnable(){
                @Override
                public void run () {
                    Intent firstServiceIntent=new Intent(getApplicationContext(),MyService.class);
                }
            }).start();
    

    我必须在服务中执行后台位置更新。我在服务中使用了LocationListner,它经常调用onLocationChanged(),这会阻塞我的UI线程。如果我在onLocationChanged()中使用create thread,每次调用此方法时都会生成一个新线程。因此,我考虑在新线程中创建整个服务,而不是在onLocationChanged()中创建线程。这是一个好的解决方案还是最好的方法?非常感谢您的帮助。

    3 回复  |  直到 7 年前
        1
  •  3
  •   Angel Kjoseski    3 年前

    如果希望服务在后台线程上运行,则有两个选项:

    1. 使用 IntentService 它由Android操作系统自动在后台线程上运行。您在 IntentService公司 将在后台线程上运行。您不需要执行任何线程。

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

    更多信息请参见: Android Services

        2
  •  1
  •   Bertram Gilfoyle    7 年前

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

    然而,从不同的线程启动服务看起来很难看。您可以在服务内创建新线程。

        3
  •  1
  •   Santanu Sur    7 年前

    如果您正在使用 IntentService android组件,它将自动处理您的后台处理 onHandleIntent(...) 你可以试试。。。

      class YourService extends IntentService
    

    IntentService

    否则,如果您使用 Service 喜欢

      class YourService extends Service
    

    您可以使用 自定义线程 在里面 onCreate()

    其他

    服务将在中运行 MainThread

    Service