【问题标题】:Unable to remove activity from stack,无法从堆栈中删除活动,
【发布时间】:2019-03-13 18:52:54
【问题描述】:

我正在从服务开始一项活动。 ,

在这我设置了两个标志一个是

Intent.FLAG_ACTIVITY_NEW_TASK 因为我正在从 service.its new 运行活动

Intent.FLAG_ACTIVITY_NO_HISTORY 设置为不保存在历史堆栈中的新活动。一旦用户离开它,活动就完成了。

这是我从服务调用到打开活动的代码

 public static void open(Context context){

        Intent intent=new Intent(context,PopupActivity.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_NO_HISTORY);
        context.startActivity(intent);    
    }

我的活动中有十字按钮来销毁活动,当我按下十字按钮时,活动应该从堆栈中删除,但它仍保留在堆栈中,当按下主页按钮查看它时,活动在堆栈中重新创建。例如“oncreate”又被称为

这是我的代码。

 @OnClick(R.id.flClose) void closeWindow(){

       finish();
    }

这是我的清单活动代码。

    <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.mypackagename">


    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.READ_CONTACTS" />
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />

    <application
        android:name=".app.MyApplication"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme.NoActionBar">
        <activity android:name=".SplashActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity
            android:name=".DashboardActivity"
            android:screenOrientation="portrait" />
        <activity
            android:name=".SearchUserActivity"
            android:screenOrientation="portrait" />
        <activity
            android:name=".TermsPolicyActivity"
            android:screenOrientation="portrait" />
        <activity
            android:name=".UserDetailActivity"
            android:screenOrientation="portrait" />
        <activity
            android:name=".DocumentViewerActivity"
            android:screenOrientation="portrait" />



        <activity
            android:noHistory="true"
            android:name=".PopupEndActivity"
            android:configChanges="orientation|keyboardHidden"
            android:theme="@style/Theme.AppCompat.Transparent.NoActionBar" />


        <activity
            android:name=".BlockActivity"
            android:theme="@style/Theme.AppCompat.Transparent.NoActionBar" />


        <activity
            android:name=".BlockSettingsActivity"
            android:theme="@style/AppTheme.NoActionBar"
            android:configChanges="orientation|keyboardHidden"
            />


        <service
            android:name=".service.SyncDataService"
            android:enabled="true"
            android:exported="false" />


    </application>

</manifest>

【问题讨论】:

  • 你使用ButterKnife.bind(this);吗?
  • 是的,它就在那里。
  • 调试时,程序是否执行filish();行?
  • 请发布您的清单。

标签: java android android-intent android-activity service


【解决方案1】:

尝试使用finishAffinity() 而不是finish()

【讨论】:

    【解决方案2】:

    添加以下标志而不是 setflags 来打开活动

    intent.addFlags(Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
    

    在关闭按钮上调用下面的函数

    private void endTask() {
            if (Build.VERSION.SDK_INT >= 21) {
                finishAndRemoveTask();
            } else {
                finish();
            }
        }
    

    【讨论】:

      【解决方案3】:

      您可以通过在 AndroidManifest.xml 文件的相关条目中将 android:noHistory 属性设置为“true”来获得此行为。

      例如:

      <activity
          android:name=".YourActivity"
          android:noHistory="true" />
      

      【讨论】:

        【解决方案4】:

        我通过添加标志 Intent.FLAG_ACTIVITY_NEW_DOCUMENT 解决了我的问题这个标志用于将文档打开到根植于启动的活动的新任务中

        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
        

        在清单中我有 noHistory

        android:noHistory="true"
        

        【讨论】:

        • 这毫无意义。通常您只会将FLAG_ACTIVITY_NEW_DOCUMENT 与FLAG_ACTIVITY_MULTIPLE_TASK 结合使用。
        • 我正在从服务开始活动,这就是我使用 Intent.FLAG_ACTIVITY_NEW_TASK 的原因。如果没有 ntent.FLAG_ACTIVITY_NEW_DOCUMENT 标志,当我按下主页按钮时,我的活动会重新创建
        • 对不起,这完全没有意义。请将您的清单添加到问题中。
        • 是的,当您从Service 启动Activity 时,您需要设置FLAG_ACTIVITUY_NEW_TASK。您关于按 HOME 的评论再次创建 Activity 完全没有意义。
        • 我更新了活动代码...我不想将活动保留在堆栈中
        猜你喜欢
        • 2013-08-11
        • 2010-12-26
        • 2012-12-16
        • 2018-08-29
        • 1970-01-01
        • 1970-01-01
        • 2014-05-07
        • 1970-01-01
        相关资源
        最近更新 更多