WakefulBroadcastReceiver onReceive方法的上下文

时间:2015-06-30 15:08:48

标签: android broadcastreceiver google-cloud-messaging

我的广播接收器有以下几行代码:

public class GcmBroadcastReceiver extends WakefulBroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        ComponentName comp = new ComponentName(context.getPackageName(),
                GcmIntentService.class.getName());
        // Start the service, keeping the device awake while it is launching.
        startWakefulService(context, (intent.setComponent(comp)));
        setResultCode(Activity.RESULT_OK);
    }
}

在这种情况下,背景来自哪里?为什么我要问的是我的应用程序在异步任务的onPostExecute()中崩溃了一次,我实际上在调用getActivity.finish()并开始一个新活动。当我收到通知时,上下文是否来自我当前所处的活动/片段?如果是这样,我是否可以在完成活动结束后收到通知,这就是为什么我在上下文中收到了NPE?

 protected void onPostExecute(Checkin checkin) {
                        super.onPostExecute(checkin);
                            Activity activity = getActivity();
                            if (activity != null) {
                                activity.finish();
                            }

                            startActivity(new Intent(getActivity(), MainDrawer.class).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK));
                        }
                    }

                }.execute();

这是应用程序崩溃时出现的错误:

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference

在检查跟踪时,它是在我上面提到的异步任务的回调中,但我调用getPackageName()的唯一地方是我展示的代码中的那个。

为了将来参考,我将确保在代码上执行这些行之前上下文不为null,以防止应用程序崩溃,但我现在对此非常好奇。

1 个答案:

答案 0 :(得分:0)

在Lollipop上,当您尝试使用null上下文创建Intent时,会发生您发布的错误消息,例如:

Intent i = new Intent(null, MainActivity.class);

onPostExecute()方法中,将调用内的startActivity()移至非活动检查中。