【问题标题】:App re-open on same activity issue应用程序在相同的活动问题上重新打开
【发布时间】:2014-06-06 09:08:10
【问题描述】:

我有 3 个活动,活动 1、活动 2 和活动 3。 当应用程序进入后台时,它总是从相同的活动中打开。例如 Activity1 是一个启动器 Activity,而不是导航到 Activity2,现在我按下 HOME 按钮,应用程序进入后台,每当应用程序重新打开它时,它就会打开 Activity2。但是在某些设备(三星 S5)上我遇到了问题,当应用程序在 Activity2 上时,按下主页按钮而不是重新打开应用程序它总是打开 Activity1,它是启动器 Activity。但我希望当 App 重新打开时,它会打开上次打开时相同的 Activity。

Activity2 代码如下

public class Activity2 extends Activity{
/** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity2);
}

public void onActivity1(View view){
    Intent mainIntent = new Intent(this, Activity1.class);
    mainIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    mainIntent.putExtra("EXIT", true);
    startActivity(mainIntent);
    Settings.this.finish();
}

public void onActivity3(View view) {
Intent infoIntent = new Intent(this, Activity3.class);
infoIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
infoIntent.putExtra("EXIT", true);
    startActivity(infoIntent);
    Settings.this.finish();
}
}

下面是清单代码

<activity
        android:name=".SplashScreen"
        android:label="@string/app_name"
        android:screenOrientation="portrait"
        android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name=".Activity1"
        android:configChanges="orientation|keyboardHidden"
        android:screenOrientation="portrait"
        android:stateNotNeeded="true"
        android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
        android:windowSoftInputMode="stateAlwaysHidden" >
    </activity>
    <activity
        android:name=".Activity2"
        android:configChanges="orientation|keyboardHidden"
        android:screenOrientation="portrait"
        android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
    </activity>
    <activity
        android:name=".Activity3"
        android:configChanges="orientation|keyboardHidden"
        android:screenOrientation="portrait"
        android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
    </activity>

【问题讨论】:

  • 您是否在活动的 onpause 方法中使用了 finish() 或其他东西??
  • 你能贴一些代码吗?
  • 在哪个活动上? "非法争论
  • 您可以尝试从清单中删除 android:stateNotNeeded="true" 以查看这是否会改变行为。三星设备可能因此而表现异常。否则,您应该在按下 HOME 按钮后使用adb shell dumpsys activity activities 查看活动堆栈,以查看您的任务状态是否正确。还要查看 logcat 以查看是否有任何相关错误。

标签: android android-activity activity-finish


【解决方案1】:

我认为这是不可能的,因为由于内存问题或其他原因,系统可以在任意时间终止后台活动。如果您的活动被操作系统杀死,则无法将其恢复到以前的状态(此处为 Activity2)。其实这不是设备问题,可能取决于设备规格,特别是内存。

【讨论】:

  • 这个答案是不真实的。如果 Android 因资源问题而终止您的进程,它会准确地记住任务的状态并知道哪个 Activity 处于顶部。当用户返回应用程序时,Android 将重新创建进程,然后重新创建位于堆栈顶部的 Activity(在本例中为 Activity2)。只有在用户将应用程序长时间留在后台的情况下(通常为 30 分钟或更长时间,这取决于设备),Android 才会丢弃保存的状态并从头重新启动应用程序。
【解决方案2】:

尝试将 android:launchmode="singleTask" 用于您的主要活动:)

【讨论】:

  • 欢迎来到 SO。如果您还没有阅读,请阅读此how-to-answer
【解决方案3】:

三星似乎破坏了你的活动。但总的来说,使用 Activity 生命周期来了解 Activity 何时被销毁。

【讨论】:

  • 我知道 Activity 生命周期。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-19
  • 1970-01-01
  • 1970-01-01
  • 2017-10-23
  • 1970-01-01
  • 2015-11-20
相关资源
最近更新 更多