启动启动活动时终止所有其他先前的活动

时间:2017-09-09 11:56:58

标签: android

在我的应用中,我总是希望用户从启动画面开始。例如,我的应用程序可能在后台打开,并弹出一些启动启动活动的通知。这应该终止所有以前正在运行的活动。

我通过存储所有正在运行的活动参考的列表来完成此操作。当启动启动时,只需调用

for(runningActivity : runningActivitiesList) {
    runningActivity.finish();
}

此解决方案效果很好。但是,Android Studio在存储对活动的引用时会向我发出内存泄漏警告。

有人可以建议我采用更好的方法来避免内存泄漏吗?

4 个答案:

答案 0 :(得分:5)

也许就是用清晰的堆栈启动Activity:

Intent intent = new Intent(context, clazz);
intent.setFlags(IntentCompat.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);

答案 1 :(得分:1)

尝试了所有其他选项,但只有对我有用的是:

final Intent intent = new Intent(applicationContext, SplashActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
            | IntentCompat.FLAG_ACTIVITY_CLEAR_TASK
            | Intent.FLAG_ACTIVITY_NEW_TASK);
    return IntentCompat.makeRestartActivityTask(intent.getComponent());

请注意:此解决方案也不是完整的证明。因为,当我通过Google Play商店打开我的应用时,即使另一个应用实例在后台运行,它也会启动启动活动。因此,我最终得到了2个相同活动的实例。

答案 2 :(得分:0)

您无需完成所有正在运行/以前的应用程序。相反,您可以使用TaskBuilder api开始您的活动以处理正确的后退导航。

用这个打开你的活动:

private static PendingIntent makePendingIntent(@NonNull Context context, @NonNull Intent resultIntent) {
TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
// Adds the back stack
stackBuilder.addParentStack(YourActivity.class);
// Adds the Intent to the top of the stack
stackBuilder.addNextIntent(resultIntent);
// Gets a PendingIntent containing the entire back stack
return stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
}

在您的清单文件中,将 YourActivity.class 的父活动定义为:

<activity
        android:name=".YourActivity"
        android:parentActivityName=".MainActivity"
        android:screenOrientation="portrait"
        android:windowSoftInputMode="stateAlwaysHidden|adjustPan">           
 </activity>

请按照以下网址获取更多详情:http://developer.android.com/reference/android/support/v4/app/TaskStackBuilder.html http://developer.android.com/guide/components/tasks-and-back-stack.html http://www.programcreek.com/java-api-examples/index.php?api=android.app.TaskStackBuilder

答案 3 :(得分:0)

在android清单集中:

机器人:launchMode = “singleTop”

对于从您的应用生成的通知,您可以在@Nischal的未决意图中使用@ mac229的标记。