Последняя открытая активность

Мое приложение при загрузке открывает FirstActivity.

Из FirstActivity я могу запустить: SecondActivity, ThirdActivity. Когда я нажимаю кнопку «Домой», а затем возвращаюсь в свое приложение, оно всегда открывает FirstActivity, а не открывает последнее действие (после возврата start FirstActivity с onCreate()).

Как я могу восстановить состояние приложения при последнем действии?

В коде я не запускаю FirstActivity.

Мой манифест:

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


    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="17.0.0"
        android:maxSdkVersion="19" />
    <permission
        android:name="com.bvblogic.nimbusnote.activities.permission.MAPS_RECEIVE"
        android:protectionLevel="signature" />

    <uses-permission android:name="com.bvblogic.nimbusnote.activities.permission.MAPS_RECEIVE" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.GET_TASKS"/>
    <!--Permission for create shortcut on Home Screen-->
    <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"></uses-permission>


    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true" />

    <application
        android:largeHeap="true"
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:theme="@style/Theme.NimbusNote.Light"
        android:hardwareAccelerated="true"
        android:label="@string/app_name"
        android:name=".application.App">
        <activity

            android:name=".activities.StartActivity"
            android:theme="@style/Theme.Sherlock.Light.NoActionBar"
            android:windowSoftInputMode="stateHidden"
            android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="com.bvblogic.nimbusnote.activities.startactivity" />
                <category android:name="android.intent.category.DEFAULT" />

            </intent-filter>
        </activity>

        <activity
            android:name=".activities.FolderListActivity"
            android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="com.bvblogic.nimbusnote.activities.folderlistactivity" />
                <category android:name="android.intent.category.DEFAULT" />

            </intent-filter>

        </activity>
        <activity
            android:name=".activities.SettingsActivity"
            android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="com.bvblogic.nimbusnote.activities.settingsactivity" />
                <category android:name="android.intent.category.DEFAULT" />

            </intent-filter>
        </activity>
        <activity
            android:name=".activities.ExplorerActivity"
            android:label="@string/app_name"
            android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="com.bvblogic.nimbusnote.activities.exploreractivity" />
                <category android:name="android.intent.category.DEFAULT" />

            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.SEARCH" />
            </intent-filter>

            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".activities.PreviewNoteActivity"
            android:windowSoftInputMode="adjustPan"
            android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="com.bvblogic.nimbusnote.activities.previewnoteactivity" />
                <category android:name="android.intent.category.DEFAULT" />

            </intent-filter>
            <intent-filter>
                <action android:name="com.bvblogic.nimbusnote.VIEW_NOTE"></action>

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

        <activity
            android:name=".activities.EditNoteActivity"
            android:windowSoftInputMode="adjustResize"
            android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="com.bvblogic.nimbusnote.activities.editnoteactivity" />
                <category android:name="android.intent.category.DEFAULT" />

            </intent-filter>
        </activity>
        <activity
            android:name=".activities.NoteInfoActivity"
            android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="com.bvblogic.nimbusnote.activities.noteinfoactivity" />
                <category android:name="android.intent.category.DEFAULT" />

            </intent-filter>
        </activity>
        <activity
            android:name=".activities.ChangePlaceMapActivity"
            android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="com.bvblogic.nimbusnote.activities.changeplacemapactivity" />
                <category android:name="android.intent.category.DEFAULT" />

            </intent-filter>
        </activity>
        <activity
            android:name=".activities.PlacesActivity"
            android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="com.bvblogic.nimbusnote.activities.placesactivity" />
                <category android:name="android.intent.category.DEFAULT" />

            </intent-filter>
        </activity>
        <activity
            android:name=".activities.ChangeTagsActivity"
            android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="com.bvblogic.nimbusnote.activities.changetagsactivity" />
                <category android:name="android.intent.category.DEFAULT" />

            </intent-filter>
        </activity>

        <activity
            android:name=".activities.TagsActivity"
            android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="com.bvblogic.nimbusnote.activities.tagsactivity" />
                <category android:name="android.intent.category.DEFAULT" />

            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.SEARCH" />
            </intent-filter>

            <meta-data
                android:name="android.app.searchable"
                android:resource="@xml/searchable" />
        </activity>
        <activity
            android:name=".activities.PainterActivity"
            android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="com.bvblogic.nimbusnote.activities.painteractivity" />
                <category android:name="android.intent.category.DEFAULT" />

            </intent-filter>
        </activity>

        <activity
            android:name=".activities.AccountSettingsActivity"
            android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="com.bvblogic.nimbusnote.activities.accountsettingsactivity" />
                <category android:name="android.intent.category.DEFAULT" />

            </intent-filter>
        </activity>

        <activity
            android:name=".activities.SyncSettingsActivity"
            android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="com.bvblogic.nimbusnote.activities.syncsettingsactivity" />
                <category android:name="android.intent.category.DEFAULT" />

            </intent-filter>
        </activity>
        <activity
            android:name=".activities.RecentNotesActivity"
            android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="com.bvblogic.nimbusnote.activities.recentnotesactivity" />
                <category android:name="android.intent.category.DEFAULT" />

            </intent-filter>
        </activity>

        <service android:name=".services.FullSyncService" />
        <service android:name=".services.PrioritySyncService" />

    </application>


</manifest>

ОБНОВЛЕНИЕ: Затем я запускаю PreviewNoteActivity из ExplorerActivity и нажимаю кнопку «Домой» и открываю приложение из ярлыка. Я возвращаюсь в ExplorerActivity. Но после нажатия Назад активность закрывается и показывает PreviewNoteActivty.

Куча:

  • Исследовательская активность
  • Предварительный просмотрПримечание

После нажатия Home и возврата в приложение:

  • Исследовательская активность
  • Предварительный просмотрПримечание
  • Исследовательская активность

но я не запускаю ExplorerActivity после перезапуска приложения. Если после запуска приложения я закрываю приложение с помощью кнопки «Назад», проблема решена. Но после компиляции и первого запуска проблема на самом деле

ОБНОВЛЕНИЕ 2: прослушиватель кнопки «Назад»

  @Override
        public void onBackPressed() {
            if (mDrawerLayout.isDrawerVisible(mDrawerLeft)) {
                closeNavigationDrawer();

            } else if (!notesFragment.searchView.isIconified()) {
                notesFragment.searchView.setQuery("", true);
                notesFragment.searchView.setIconified(true);
                notesFragment.searchView.clearFocus();
            } else if (!mDrawerLayout.isDrawerVisible(mDrawerLeft)) {

                ActivityManager actM = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
                List<ActivityManager.RunningTaskInfo> listm = actM.getRunningTasks(1);
                int iNumActivity = listm.get(0).numActivities;
                if (iNumActivity > 1) {
                    finish();
                } else {
 //close activity
                    closeAction();
                }
            }
        }

private void closeAction() {
        if (System.currentTimeMillis() - lastTimeBackPressed <= 2000) {
            App.isExplorerActivityStarted = false;
            finish();
        } else {
            lastTimeBackPressed = System.currentTimeMillis();
            Toast.makeText(getApplicationContext(), "Press again for exit", Toast.LENGTH_SHORT).show();
        }
    }

Update3: Проблема актуальна, если установить приложение из apk-файла (с SD-карты). При установке из IDE (Android Studio) проблем нет.


person a.black13    schedule 08.02.2014    source источник
comment
Какой код вы используете для перемещения между действиями?   -  person Graham Smith    schedule 09.02.2014
comment
это нормальный мэйнфест, я думаю, проблема в навигации по коду или вы реализуете метод кнопки «Назад», не могли бы вы опубликовать код?   -  person mohammed momn    schedule 09.02.2014
comment
Вау, немного схожу с ума с фильтрами намерений! Похоже, активность, которая будет запущена из панели запуска, — это ExplorerActivity. Почему так много других фильтров намерений? Я предполагаю, что вам не нужны все они, особенно те, которые просто указывают на действие, которое их содержит. Например. зачем фильтр намерений в EditNoteActivity и NoteInfoActivity? При использовании вашего приложения все, что вам нужно сделать, это создать намерение, например Intentintent = new Intent(getActivity(), EditNoteActivity.class); чтобы сообщить ОС, что вы пытаетесь перейти к этому действию.   -  person Justin Pollard    schedule 09.02.2014
comment
Между действиями я использую Intent = new Intent(getApplicationContext(), SecondActivity); startActivity(намерение);   -  person a.black13    schedule 09.02.2014
comment
Много мероприятий, потому что большой проект с 15 мероприятиями.   -  person a.black13    schedule 09.02.2014
comment
В моем приложении зарегистрировано много BroadcastReceivers (например, InternetConnection). Многие фильтры намерений, потому что у меня есть намерения класса со статическими полями, как общедоступная статическая строка EXPLORER_ACTIVITY = com.bvblogic.nimbusnote.activities.exploreractivity Начало намерения как: Intent = new Intent(Intents.EXPLORER_ACTIVITY); startActivity(намерение);   -  person a.black13    schedule 09.02.2014


Ответы (1)


Я нашел решение: это ошибка системы Android. Для решения этой проблемы я помещаю в корневую активность (сначала запущенную) в методе onCreate() следующий блок кода:

if (!isTaskRoot()) {
            Intent intent = getIntent();
            String action = intent.getAction();
            if (intent.hasCategory(Intent.CATEGORY_LAUNCHER) && action != null && action.equals(Intent.ACTION_MAIN)) {
                finish();
                return;
            }
        }
person a.black13    schedule 14.02.2014
comment
Обходной путь работает! С чего ты взял, что это системная ошибка? Больше информации об этой ошибке? - person Chlind; 06.05.2014
comment
Эта ошибка имеет номер 26xxx в системе отслеживания ошибок Android. - person a.black13; 06.05.2014