【问题标题】:Terminate all other previous activities when splash activity starts在启动活动开始时终止所有其他先前的活动
【发布时间】:2017-09-12 20:59:26
【问题描述】:

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

我通过存储所有正在运行的活动引用的列表来实现这一点。当启动活动开始时,它只是调用

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

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

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

【问题讨论】:

标签: android


【解决方案1】:

也许用清除堆栈启动 Activity 就足够了:

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

【讨论】:

    【解决方案2】:

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

    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 个相同活动的实例。

    【讨论】:

      【解决方案3】:

      您无需完成所有正在运行的/以前的应用程序。相反,您可以使用 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.htmlhttp://developer.android.com/guide/components/tasks-and-back-stack.htmlhttp://www.programcreek.com/java-api-examples/index.php?api=android.app.TaskStackBuilder

      【讨论】:

        【解决方案4】:

        在android清单集中:

        android:launchMode="singleTop"

        对于从您的应用生成的通知,您可以在@Nischal 的待处理意图中使用@mac229 的标志。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-11-11
          • 1970-01-01
          • 2011-09-06
          • 2013-12-23
          • 1970-01-01
          • 2011-02-23
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多