在开启和停止服务时,发现startService方法能正常开启一个服务,在模拟器中也可看到这个服务,但是当我调用stopService方法时,抛出了空指针异常。
@Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        button_start.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(getActivity(),"Activity Created",Toast.LENGTH_SHORT).show();
                Intent intent = new Intent(getActivity(),HelloService.class);
                getActivity().startService(intent);
            }
        });
       button_stop.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(getActivity(),"Activity Stopped",Toast.LENGTH_SHORT).show();                Intent intent2 = new Intent(getActivity(),HelloService.class);
                getActivity().stopService(intent2);
                Log.d("feng","service stopped");
            }
        });
    }E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: com.example.fragment, PID: 5073
                  java.lang.RuntimeException: Unable to stop service com.example.fragment.HelloService@2a706651: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.os.Looper.quit()' on a null object reference
                      at android.app.ActivityThread.handleStopService(ActivityThread.java:2911)
                      at android.app.ActivityThread.access$2200(ActivityThread.java:144)
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1381)
                      at android.os.Handler.dispatchMessage(Handler.java:102)
                      at android.os.Looper.loop(Looper.java:135)
                      at android.app.ActivityThread.main(ActivityThread.java:5221)
                      at java.lang.reflect.Method.invoke(Native Method)
                      at java.lang.reflect.Method.invoke(Method.java:372)
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
                   Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.os.Looper.quit()' on a null object reference
                      at android.app.IntentService.onDestroy(IntentService.java:136)
                      at android.app.ActivityThread.handleStopService(ActivityThread.java:2894)
                      at android.app.ActivityThread.access$2200(ActivityThread.java:144) 
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1381) 
                      at android.os.Handler.dispatchMessage(Handler.java:102) 
                      at android.os.Looper.loop(Looper.java:135) 
                      at android.app.ActivityThread.main(ActivityThread.java:5221) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at java.lang.reflect.Method.invoke(Method.java:372) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 
Application terminated.

解决方案 »

  1.   

    你的service没调super吧,onCreat里面,记得重写方法时如果不知道super干了什么就不要删除
      

  2.   

    IntentService不需要手动停止,如果需要手动停止改为Service。
      

  3.   

    你启动和关闭service时,都是new Intent(),是两个不同的对象。 这就导致你开启和关闭的并不是同一个service。解决办法:将Intent设为变量,只在开启service时new 一次,关闭service的时候直接调用。
      

  4.   

    IntentService不需要手动停止,如果需要手动停止改为Service。