Android 前台服务脱离主线程?

Android 前台服务脱离主线程?,android,multithreading,Android,Multithreading,我是安卓系统的新手,所以请耐心等待。我正在编写一个应用程序,在服务类中使用前台服务跟踪智能手机,并提供通知,以确保该服务不会被操作系统终止。除了向服务器发送坐标时出现的Networkonmainthreadexception之外,一切正常。插入policy.permitall我可以解决这个问题,但我想使用一个单独的线程。尽管如此,即使在一个新线程中启动前台服务(使用start()方法),我仍然会收到网络异常 由于长期运行的服务,我将把Asynctask作为第二选择。我尝试了IntentServi

我是安卓系统的新手,所以请耐心等待。我正在编写一个应用程序,在服务类中使用前台服务跟踪智能手机,并提供通知,以确保该服务不会被操作系统终止。除了向服务器发送坐标时出现的Networkonmainthreadexception之外,一切正常。插入policy.permitall我可以解决这个问题,但我想使用一个单独的线程。尽管如此,即使在一个新线程中启动前台服务(使用start()方法),我仍然会收到网络异常

由于长期运行的服务,我将把Asynctask作为第二选择。我尝试了IntentService,但生成的代码结构并不是GPS跟踪的最佳方式。
下面是启动新线程的简单代码

                    @Override
                    public void run() {
                        Intent rastreoIntent = new Intent(mContext, RastreoS.class );
                        rastreoIntent.setAction(RastreoS.ACTION_START_FOREGROUND_SERVICE);
                        startService(rastreoIntent);
                    }
                };
                t.start();
所以我的问题是:前台服务是否可以用完主线程?UI中的通知是否将前台服务绑定到主线程,即使在新线程中启动?

服务的生命周期方法(例如
onStartCommand()
),与Android上的其他组件(例如
活动
内容提供者
广播接收器
)相同,始终由系统在主线程上调用。(您可以选择让系统在另一个线程上调用您的
BroadcastReceiver.onReceive()
,但仅此而已。)

即使您在工作线程上调用
startService()
,实际的启动也是由框架异步安排的,并且在主线程空闲时将在主线程上发生,因此您的
服务
生命周期方法仍将在主线程上调用。要将繁重的工作移出主线程,您需要在
服务
实现中修改代码


由于您正在使用,它已经在为您创建工作线程,您只需确保您的网络代码在工作线程上运行。

使用workmanager Ok。知道了。看来我要重新尝试一下IntentService。谢谢你的时间!