当启动闪屏界面时,终止所有其他之前的活动。

5

我希望我的应用程序始终从启动屏幕开始。例如,我的应用程序可能在后台打开,然后弹出一些通知,该通知将启动启动屏幕活动。这应终止所有先前正在运行的活动。

我通过存储所有正在运行的活动引用列表来实现此目的。当启动屏幕活动启动时,它只需调用

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

这个解决方案很有效。然而,当存储对活动的引用时,Android Studio会给我警告内存泄漏。

请问有人能建议一种更好的方法来避免内存泄漏吗?


阅读这篇文章 - Maveňツ
4个回答

5
也许足够的方法是使用清除堆栈的方式启动Activity:
Intent intent = new Intent(context, clazz);
intent.setFlags(IntentCompat.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);

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商店打开我的应用时,即使另一个应用程序实例在后台运行,它仍会启动闪屏活动。因此,我最终会有两个相同活动的实例。

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


0
在Android清单文件中设置:
android:launchMode="singleTop"
对于从您的应用程序生成的通知,您可以在@Nischal的挂起意图中使用@mac229的标志。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接