service抛出NullException ,导致系统崩溃

(Android)service抛出NullException ,导致系统崩溃

service是这样的

public class GetUserInfoService extends Service {
    private Context context;
    private List<User> tempList;
    private Boolean progress = false;

    public void startAsyncTask(Context context, List<User> tempList) {
        new DoUpdateUserTask(context, new GetUnGetDataHandler(), null)
                .exe(tempList);

    }

    @Override
    public void onCreate() {
        super.onCreate();
    }

    @SuppressWarnings("unchecked")
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        if (null != intent) {
            tempList = (List<User>) intent.getSerializableExtra("reqList");
            startAsyncTask(getApplicationContext(), tempList);
        }
        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public IBinder onBind(Intent arg0) {
        return null;
    }

    public class MsgBinder extends Binder {
        public GetUserInfoService getService() {
            return GetUserInfoService.this;
        }
    }

    public class GetUnGetDataHandler extends Handler {

        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what) {
            case Constant.REQUEST_SUCCESS:
                progress = true;
                List<User> saveList = (List<User>) msg.obj;
                new UserDao(context).saveUserInfoList(saveList);
                InstHXSDKHelper.displayNotifier();
                break;

            default:
                break;
            }
        }

    }

}

崩溃日志是这样的:

java.lang.RuntimeException: Unable to start service **com.jiuqi.kzwlg.driverclient.chat.service.GetUserInfoService@4241ec80 with null: java.lang.NullPointerException**
    at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2728)
    at android.app.ActivityThread.access$2100(ActivityThread.java:147)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1306)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:136)
    at android.app.ActivityThread.main(ActivityThread.java:5133)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:611)
    at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
    at com.jiuqi.kzwlg.driverclient.chat.service.GetUserInfoService.onStartCommand(GetUserInfoService.java:45)
    at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2711)
    ... 10 more
java.lang.NullPointerException
    at com.jiuqi.kzwlg.driverclient.chat.service.GetUserInfoService.onStartCommand(GetUserInfoService.java:45)
    at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2711)
    at android.app.ActivityThread.access$2100(ActivityThread.java:147)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1306)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:136)
    at android.app.ActivityThread.main(ActivityThread.java:5133)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:611)
    at dalvik.system.NativeStart.main(Native Method)

原因:

intent的参数是null,原因是这个intent参数是通过startService(Intent)方法所传递过来的,但是如果Service在你的进程退出后有可能被系统自动重启,这个时候intent就会是null.
解决方法:
所以在使用intent前需要判断一下是否为空。
还有另外一种解决方法:
如果实现 onStartCommand去调度异步工作或者其他的线程,有必要设置START_FLAG_REDELIVERY让系统重发intent到service以便service被killed后不会丢失intent数据。


关于service在后头怎样被干掉又被系统重启,建议深入学习一下service
可以参考这篇文章:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值