0

我从MainActivity以及Fragment开始后台服务。是否从MainActivity和碎片复制线程开始服务?

它会创建重复线程吗?所以这将是2服务运行?

MainActivity

protected void onCreate(Bundle savedInstanceState) { 
    //... 
    context.startService(new Intent(context,gps_service.class)); 
//... 

片段

public class FragmentThree extends Fragment { 

//... Click method of the button calls 
getActivity().startService(new Intent(getActivity(),gps_service.class)); 
+0

可能重复的:https://stackoverflow.com/a/8019919/5154891。 –

回答

2

它会创建重复的主题?所以这将是2服务运行?

NO只有一个服务将被推出,只有一个会运行

2

只会有一个服务运行。

它会创建重复线程吗?所以这将是2服务运行?

每次调用startService()可能有两种可能性。

  1. 如果Service in not previously previously then it will start per life cycle。 onCreate - > onStartCamm​​and等等。

  2. 如果服务先前已启动,则只有onStartCamm​​and()将以您传递给它的所需意图被调用。

1

每个Service只存在一个实例。如果您的服务已在运行,那么如果您尝试重新启动,则会调用onStartCommand(Intent, int, int)

Android Official site

注意:一种服务,它的宿主进程的主线程中运行;该服务不会创建自己的线程,也不会在单独的进程中运行,除非您另行指定。

所以默认Service使用主线程和IntentService使用后台线程。如果您想要执行一些长时间运行的任务,请使用IntentService或在Service中创建后台线程。

详细检查this