Невозможно удалить активность из стека, - PullRequest
0 голосов
/ 13 марта 2019

Я начинаю деятельность с сервиса.,

В этом я установил два флага , один

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

, и у меня есть кросс-кнопка в моей активности, чтобы уничтожить активность, когда я нажимаю кросс-кнопкуактивность должна быть удалена из стека, но она останется в стеке, и когда нажмите кнопку home, чтобы просмотреть ее, активность, воссозданная в стеке. Например, «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 голосов
/ 14 марта 2019

Я решил мою проблему, добавив флаг Intent.FLAG_ACTIVITY_NEW_DOCUMENT Этот флаг используется, чтобы открыть документ в новой задаче, основанной на активности, запущенной

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

В манифесте у меня есть noHistory

android:noHistory="true"
0 голосов
/ 14 марта 2019

Добавьте следующие флаги вместо 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();
        }
    }
0 голосов
/ 14 марта 2019

Вы можете получить это поведение, установив атрибут android: noHistory в значение "true" в соответствующих записях в файле AndroidManifest.xml.

Например:

<activity
    android:name=".YourActivity"
    android:noHistory="true" />
0 голосов
/ 14 марта 2019

Попробуйте использовать finishAffinity() вместо finish()

...