活动onNewIntent空指针异常

sav*_*ion 8 android nullpointerexception android-activity onnewintent

我在我的活动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
}
Run Code Online (Sandbox Code Playgroud)

当我尝试使用onNewIntent中的过滤项时,有时我会得到一个空指针异常.

 @Override
   protected void onNewIntent(Intent intent) {
      super.onNewIntent(intent);
      filtered.clear();
   }
Run Code Online (Sandbox Code Playgroud)

怎么可能呢?

编辑:我的Activity的launchmode是SingleTask

编辑2:

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

感谢您的帮助,但我无法粘贴整个代码隐私的原因.

我认为我在SingleTask-OnCreate-OnNewIntent使用方面存在问题.我只是试图通过通知打开我的应用程序,并通过参数决定当用户导航到活动时将打开哪个片段.

你有任何关于这个包含SingleTask-OnCreate-OnNewIntent实现的例子吗?

感谢大家的帮助.

Mr-*_*IDE 3

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

https://github.com/WhisperSystems/Signal-Android/issues/2971

他们认为这是由 Android 框架中的错误引起的,即使您onNewIntent()从. 这最终会导致对象在a 中使用,因为对象尚未在通常的 中设置。这似乎是一种罕见的情况或和之间的竞争条件。onCreate()finish()onCreate()nullonNewIntent()NullPointerExceptiononCreate()onCreate()onNewIntent()

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

@Override
protected void onNewIntent(Intent intent) {
    Log.w(TAG, "onNewIntent()");
 
    if (isFinishing()) {
        Log.w(TAG, "Activity is finishing...");
        return;
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

来源1:https://github.com/SilenceIM/Silence/commit/c0acae1124c0c066fd961d21d3ec9b989574125d

来源2: https: //github.com/SilenceIM/Silence/blob/0b4ea2412273f4e4918cff8f304380d3151ff6d4/src/org/smssecure/smssecure/ConversationActivity.java#L225-L249


更新: 2017 年 11 月 10 日:升级构建工具时,此问题似乎很少发生app/build.gradle

buildToolsVersion '25.0.2'
Run Code Online (Sandbox Code Playgroud)

对于较旧的构建工具(例如 ),这种情况似乎更常见buildToolsVersion '23.0.3',但仍然需要修复,因为它仍然在极少数情况下发生。