我在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
}
当我尝试使用onNewIntent中的过滤项时,有时会遇到空指针异常。
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
filtered.clear();
}
这怎么可能呢?
编辑:我的活动的启动模式为SingleTask
编辑二:
我不能发送更多有用的日志,因为这个崩溃是在生产。只有我得到一些结构日志。
谢谢你的帮助,但我不能粘贴整个代码的隐私原因。
我想我在使用SingleTask-OnCreate-OnNewIntent时遇到了一个问题。简单地说,我正尝试从通知中打开我的应用,其中一个参数决定了当用户导航到Activity时将打开哪个片段。
您是否有任何包含SingleTask-OnCreate-OnNewIntent实现的示例?
感谢所有人的帮助。
3条答案
按热度按时间busg9geu1#
Open Whisper Systems的团队遇到了同样的问题:
https://github.com/WhisperSystems/Signal-Android/issues/2971
他们认为这是由Android框架中的一个bug引起的,当它在
onCreate()
之后很快调用onNewIntent()
时,即使你在onCreate()
中调用finish()
。这最终导致null
对象在onNewIntent()
中使用,然后在NullPointerException
中使用。因为在通常的onCreate()
中还没有设置对象。这似乎是一种罕见的情况,或者是onCreate()
和onNewIntent()
之间的争用情况。他们似乎已经通过检查
onNewIntent()
中的isFinishing()
来修复它,以防止onNewIntent()
继续:来源1:https://github.com/SilenceIM/Silence/commit/c0acae1124c0c066fd961d21d3ec9b989574125d
来源二:https://github.com/SilenceIM/Silence/blob/0b4ea2412273f4e4918cff8f304380d3151ff6d4/src/org/smssecure/smssecure/ConversationActivity.java#L225-L249
更新日期:2017年11月10日:在
app/build.gradle
中升级构建工具时,这个问题似乎很少发生:这种情况似乎在较旧的构建工具(如
buildToolsVersion '23.0.3'
)中发生得更频繁,但仍然需要修复,因为这种情况仍然很少发生。mwkjh3gx2#
请记住生命周期,您可能会从未调用onCreate()的某个点返回Activity(例如,如果您在清单中设置了launchMode=singleTask或其他内容)。您可能会在onResume()中初始化/重新填充ArrayList,并检查它是否不为空,当您返回Activity时,会调用onResume()。
xxb16uws3#
如果您在
onNewIntent()
方法中获取NullPointerException
,则filtered
对象可能为空。试试这边