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

时间:2017-08-08 12:20:12

标签: android android-intent android-alertdialog android-lifecycle android-7.1-nougat

在我的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包含:

<activity
    android:name=".MainActivity"
    android:label="@string/app_name"
    android:launchMode="singleTask"
    android:screenOrientation="landscape" >
    <intent-filter>
      <action android:name="android.intent.action.VIEW" />
      <category android:name="android.intent.category.DEFAULT"/>
      <category android:name="android.intent.category.BROWSABLE"/>
      <data android:scheme="http" android:host="open.example.com" android:pathPattern=".*"/>
      <data android:scheme="https" android:host="open.example.com" android:pathPattern=".*"/>
    </intent-filter>
....

sdk版本设置为

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

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

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

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

2 个答案:

答案 0 :(得分:2)

似乎不同版本不在Android版本中。

如果你启用&#34;不要保持活动&#34;在开发人员设置中标记,然后生命周期将是下一个:

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

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

答案 1 :(得分:2)

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

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

  

不要在“开发人员选项”菜单下保留活动。当这个   选项已启用,Android操作系统将尽快销毁活动   它被停止了。它旨在帮助开发人员调试他们的应用程序。对于   例如,它可以模拟Android将杀死活动的情况   在后台由于记忆压力。在正常使用中,它不是   建议打开此选项,因为这可能会导致意外   应用程序上的问题,例如冻结,强制关闭和重新启动。

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