解压缩片段中的服务

时间:2013-09-22 22:47:04

标签: android android-fragments android-service

我在绑定/解除绑定服务的问题上阻止了3天,我将我的旧活动分段传递。片段中的绑定服务似乎工作正常,但解绑服务崩溃,你能帮帮我吗?

@Override
    public void onStart() {
        //On attache la vue au service
        getActivity().bindService(
                new Intent(getActivity().getApplicationContext(), GeoLocatingService.class),
                connection, Context.BIND_AUTO_CREATE);
        super.onStart();

    }





    @Override
    public void onStop() {
         //On detache la vue du service
            if(myService!=null){
                getActivity().getApplicationContext().unbindService(connection);
            }

        super.onStop();
    }

错误日志:

  

09-23 00:39:00.541:E / AndroidRuntime(17970):致命异常:主要   09-23 00:39:00.541:E / AndroidRuntime(17970):   java.lang.IllegalArgumentException:服务未注册:   com.timo.geolocalisation.Dashboard_Fragment$3@40557f58 09-23   00:39:00.541:E / AndroidRuntime(17970):at   android.app.LoadedApk.forgetServiceDispatcher(LoadedApk.java:891)   09-23 00:39:00.541:E / AndroidRuntime(17970):at   android.app.ContextImpl.unbindService(ContextImpl.java:925)09-23   00:39:00.541:E / AndroidRuntime(17970):at   android.content.ContextWrapper.unbindService(ContextWrapper.java:352)   09-23 00:39:00.541:E / AndroidRuntime(17970):at   com.timo.geolocalisation.Dashboard_Fragment.onStop(Dashboard_Fragment.java:220)   09-23 00:39:00.541:E / AndroidRuntime(17970):at   android.support.v4.app.Fragment.performStop(Fragment.java:1651)09-23   00:39:00.541:E / AndroidRuntime(17970):at   android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:979)   09-23 00:39:00.541:E / AndroidRuntime(17970):at   android.support.v4.app.FragmentManagerImpl.detachFragment(FragmentManager.java:1258)   09-23 00:39:00.541:E / AndroidRuntime(17970):at   android.support.v4.app.BackStackRecord.run(BackStackRecord.java:667)   09-23 00:39:00.541:E / AndroidRuntime(17970):at   android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1460)   09-23 00:39:00.541:E / AndroidRuntime(17970):at   android.support.v4.app.FragmentManagerImpl $ 1.run(FragmentManager.java:440)   09-23 00:39:00.541:E / AndroidRuntime(17970):at   android.os.Handler.handleCallback(Handler.java:587)09-23   00:39:00.541:E / AndroidRuntime(17970):at   android.os.Handler.dispatchMessage(Handler.java:92)09-23   00:39:00.541:E / AndroidRuntime(17970):at   android.os.Looper.loop(Looper.java:123)09-23 00:39:00.541:   E / AndroidRuntime(17970):at   android.app.ActivityThread.main(ActivityThread.java:3691)09-23   00:39:00.541:E / AndroidRuntime(17970):at   java.lang.reflect.Method.invokeNative(Native Method)09-23   00:39:00.541:E / AndroidRuntime(17970):at   java.lang.reflect.Method.invoke(Method.java:507)09-23 00:39:00.541:   E / AndroidRuntime(17970):at   com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:847)   09-23 00:39:00.541:E / AndroidRuntime(17970):at   com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)09-23   00:39:00.541:E / AndroidRuntime(17970):at   dalvik.system.NativeStart.main(原生方法)

1 个答案:

答案 0 :(得分:0)

似乎Service已在三个Fragment中的一个中停止,当您尝试停止其他两个Service中的Fragment时,您会收到此错误

从Android文档中可以看出:

  

请注意,对Context.startService()的多次调用不会嵌套(尽管它们会导致对onStartCommand()进行多次相应的调用),因此无论启动多少次,服务都会被停止一次{{调用1}}或Context.stopService();但是,服务可以使用其stopSelf()方法来确保在处理完启动意图之前不会停止服务。

因此,请检查其中一个stopSelf(int)是否正在停止Fragment,或者您可以在Service中启动和停止该服务!如果FragmentActivity需要Activity,请Fragments处理此问题并传递对Service的引用。