无法从堆栈中删除活动,

时间:2019-03-13 18:52:55

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

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

在这种情况下,我设置了两个标志,一个是

Intent.FLAG_ACTIVITY_NEW_TASK 因为我正在通过service.its新的

运行活动

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>

4 个答案:

答案 0 :(得分:0)

尝试使用finishAffinity()代替finish()

答案 1 :(得分:0)

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

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();
        }
    }

答案 2 :(得分:0)

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

例如:

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

答案 3 :(得分:0)

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

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

清单中我有 noHistory

android:noHistory="true"