活动生命周期随API 25(7.1.1)而变化

在我的MainActivity中,如果设置了intent中的标志,我会打开一个对话框。 如果对话框已创建,则在onPause()中将其解除

 @Override public void onPause() { super.onPause(); if (_dialog!= null) { _dialog.dismiss(); _dialog= null; } } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); if (intentContainsFlag) { _dialog = ....; _dialog.show(); } } 

如果按下ListView持有者按钮并构建意图URI,则打开该对话框:

 bttn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // The URL scheme is registered in the intent filter String intentString = "http://open.example.com/myParameters"; v.getContext().startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(intentString))); } }); 

AndroidManigfest包含:

         .... 

sdk版本设置为

 minSdkVersion = 19 targetSdkVersion= 22 compileSdkVersion = 23 buildToolsVersion = 23 

在Android <7.1.1上,一切都按预期工作: onNewIntent()并且对话框可见。

但是在7.1.1。 设备调用MainActivity的onNewIntent ,然后直接调用onPauseonResume 。 这意味着活动打开/到达前台但对话框立即关闭。

一个可能的解决方法是关闭onStop()的对话框,但我不明白为什么在Android 7.1.1上发生这种情况 – 生命周期中有什么变化

但是在7.1.1。 设备调用MainActivity的onNewIntent,然后直接调用onPause和onResume。 这意味着活动打开/到达前台但对话框立即关闭。

Android框架可能会在后台或后台堆栈中破坏您的活动,您应该编写活动,以便在发生这种情况时它们正常运行。 看这个 :

不要在“开发者选项”菜单下保留活动。 启用此选项后,Android操作系统将在停止后立即销毁该活动。 它旨在帮助开发人员调试他们的应用程序。 例如,它可以模拟Android由于内存压力而在后台杀死活动的情况。 在正常使用中,建议不要启用此选项,因为这可能会导致应用程序出现意外问题,例如冻结,强制关闭和重新启动。

您的对话框本身会导致您的活动暂停而非关闭。

似乎不同的Android版本不同。

如果在开发人员设置中启用“不要保留活动”标志,那么生命周期将是下一个:

 onCreate onResume * perform startActivityForResult onPause onDestroy * returning result onCreate onResume onPause onNewIntent onResume 

因为onNewIntent总是处于暂停状态。