Android Wintent空指针异常的活动

Android Wintent空指针异常的活动,android,android-activity,nullpointerexception,onnewintent,Android,Android Activity,Nullpointerexception,Onnewintent,我在activity onCreate()中初始化列表,如下所示: private List<MyItem> filtered; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_dashboard); filt

我在activity onCreate()中初始化列表,如下所示:

private List<MyItem> filtered;
@Override
   protected void onCreate(@Nullable Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_dashboard);
      filtered = new ArrayList<>();

      // more things
}
怎么可能呢

编辑:我的活动的启动模式是SingleTask

编辑2:

我无法发送更多有用的日志,因为此崩溃正在生产中。只有我有一些织物原木

谢谢你的帮助,但出于隐私考虑,我无法粘贴整个代码

我想我在SingleTask OnCreate OnNewIntent的使用上有问题。我只是想用一个参数从通知打开我的应用程序,该参数决定当用户导航到活动时将打开哪个片段

您是否有任何包含SingleTask OnCreate OnWintent实现的示例


感谢大家的帮助。

如果您在
onNewIntent()
方法中获得
NullPointerException
,则
筛选的
对象可能为null

这样试试

@Override
protected void onNewIntent(Intent intent) {

   //Check for null value and then proceed. 
   if(filtered != null)
      filtered.clear();
} 

请记住生命周期,可能您是从未调用onCreate()的某个点返回活动(例如,如果您在清单中设置了launchMode=singleTask或其他内容)。可能在onResume()中初始化/重新填充您的ArrayList,并检查它是否不为null,当您返回活动时,会确保调用onResume()。

Open Whisper Systems的团队遇到了相同的问题:

他们认为这是由Android框架在
onCreate()
之后不久调用
onNewIntent()
引起的,即使您从
onCreate()中调用
finish()
。这最终会导致
onNewIntent()
中使用
null
对象,然后使用
NullPointerException
,因为这些对象没有在通常的
onCreate()
中设置。这似乎是
onCreate()
onNewIntent()
之间罕见的情况或竞争条件

他们似乎已经通过检查
onNewIntent()
中的
isFinishing()
来修复它,以防止
onNewIntent()
继续:

@Override
protected void onNewIntent(Intent intent) {
    Log.w(TAG, "onNewIntent()");

    if (isFinishing()) {
        Log.w(TAG, "Activity is finishing...");
        return;
    }
    ...
}
资料来源1:

资料来源2:


更新:2017年11月10日:在app/build.gradle中升级构建工具时,此问题似乎不太常见:

buildToolsVersion '25.0.2'

这种情况似乎更多地发生在较旧的构建工具上,如
buildToolsVersion'23.0.3'
,但仍然需要修复,因为这种情况很少发生。

如果遇到
NullPointerException
,请发布日志猫!就像这样,我猜
过滤的
onNewIntent()
…@savepopulation中为空。接受的答案对您有什么帮助吗?我有一个类似的问题,无法复制该问题。只能查看崩溃的结构日志:(很抱歉,我离开了项目,我遇到了这个问题,所以我看不到构建工具25.0.2在生产中发生了什么。我对这个问题做了一些研究,根据我的发现,决定接受@Mr IDE的答案。我认为当你为你的活动定义一个启动模式(标准启动除外)时,以及当它完成时,你尝试再次进行艺术创作。因此,检查是否完成是合理的。我希望这会对您有所帮助。好的,谢谢。这很有用。谢谢您的帮助,但我的代码比这更复杂。因此,如果检查不合适。@savepopulation请发布您的代码。这样我们可以帮助您。出于隐私原因,我无法发布。对不起:(我的活动的启动模式是单任务。在哪种情况下,不需要onCreate就可以调用new intent?您能举个例子吗?谢谢。f.e.如果您切换到另一个活动并返回到单任务活动,则会调用onNewIntent()并onCreate()不被调用这是正确的,但如果单个任务活动被销毁,将调用onCreate。如果未被销毁,我的列表将不会为null。这不对吗?嗯,您的ArrayList可能不应该为null,但显然是,因此您必须提供更多代码,或者最好自己进行一些调试,以确定ArrayList在哪一点变为null.“如果单个任务活动被销毁,将调用onCreate”是什么意思?我无法理解此错误是如何发生的。这就是问题所在。我从fabric获取日志。我在生产中遇到此错误。关于您2017年11月10日的更新,您为什么要假设这一点?我认为这可能与appcompat版本有关,而不是与构建工具有关ion@crgarridos,通过应用程序监控和分析,可以看出更新构建工具版本大大减少了该错误发生的次数。但它并没有100%修复它。
buildToolsVersion '25.0.2'