如何在重新打开应用程序时显示最后一个可见片段

时间:2015-10-01 04:49:04

标签: android-fragments android-activity

以下是我的用例:

用户点击App图标 - > MainActivity - > FirstActivity-> SecondActivity

SecondActivity有三个片段,即F1,F2,F3

假设用户在SecondActivity中处于F1状态,现在如果用户通过按主页按钮最小化应用程序,然后重新启动应用程序而不是使用应用程序图标,而是从列表中选择通过长按显示(不要?知道那个的技术名称

我已经探讨了大部分问题,甚至尝试了以下方法

How to make an android app return to the last open activity when relaunched?

(但这似乎有用,如果我想从应用程序图标,即从启动器重新启动我的应用程序):

以下是我的活动和片段生命周期方法调用日志:

当我最小化应用时:

  • E / SecondActivity:onPause called
  • E / F1:暂停时间
  • E / F1:OnSaveInstanceState
  • E / SecondActivity onStop名为

重新打开应用

  • E / FirstActivity:onRestart名为
  • E / FirstActivity:onStart called
  • E / FirstActivity:onResume名为
  • E / SecondActivity:onDestroy名为
  • E / F1:On Detach
  • E / FirstActivity:onPause called
  • E / FirstActivity:onStop名为

根据我的理解,这应该如下:

  • onPause of SecondActivity,我需要将当前可见片段保存在共享pref
  • onResume of SecondActivity,我需要拉出片段名称并使用fragmentManager
  • 显示它

但是在重新打开app后,我的SecondActivity onResume没有被调用,而是调用了FirstActivity的onRestart,并调用了onSetroy的SecondActivity(如上所示)

在尝试了很多选项并阅读了几个SO解决方案后,我无法解决这个问题。

请提前告知,如何处理此事。

编辑:

清单文件

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.myapp" >
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.RECEIVE_SMS" />
    <uses-permission android:name="android.permission.READ_SMS" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    <application
        android:name=".controller.ApplicationLoader"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:alwaysRetainTaskState="true"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".SplashActivity"
            android:label="@string/app_name"
            android:noHistory="true"
            android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

        <activity
            android:name=".RegistrationActivity"
            android:label="@string/title_activity_registration"
            android:noHistory="true"
            android:screenOrientation="portrait"/>
        <activity
            android:name=".HomePageActivity"
            android:label="@string/title_activity_home_page"
            android:noHistory="true"
            android:screenOrientation="portrait">

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

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

        <service
            android:name=".services.BgService"
            android:exported="false"
            android:process=":remote" >
            <intent-filter>
                <action android:name="com.example.bgapp.BackgroundService" />
            </intent-filter>
        </service>

        <receiver android:name=".services.BootReceiver" >
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>

        <activity android:name=".ProductOverviewActivity"
            android:screenOrientation="portrait">
        </activity>

        <receiver android:name=".receivers.SmsReceiver"
            android:screenOrientation="portrait">
            <intent-filter android:priority="99999">
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            </intent-filter>

        </receiver>

    <!-- Intent service -->
        <service
            android:name=".services.WService"
            android:exported="false" />

        <service android:name=".services.VerifyService" android:exported="false"/>


    </application>

</manifest>

1 个答案:

答案 0 :(得分:1)

您的问题是您的使用:

 android:noHistory="true"
<{1>} RegistrationActivity。一旦用户按下HOME,RegistrationActivity就完成了。以下是关于noHistory的文档的引用:

值“true”表示活动不会留下历史记录。它不会保留在任务的活动堆栈中,因此用户将无法返回该任务。