我的广播接收器有以下几行代码:
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,以防止应用程序崩溃,但我现在对此非常好奇。
答案 0 :(得分:0)
在Lollipop上,当您尝试使用null上下文创建Intent时,会发生您发布的错误消息,例如:
Intent i = new Intent(null, MainActivity.class);
在onPostExecute()
方法中,将调用内的startActivity()
移至非活动检查中。