即使在OS杀死应用程序后,Android活动仍保留在堆栈中

时间:2015-03-22 17:40:11

标签: android android-intent android-activity android-manifest android-task

问题:该应用程序允许您打开大量活动。正常启动应用程序,打开几个活动,然后关闭HOME按钮上的app。使用手机,打开其他应用程序。在某些时刻Android OS会杀死应用程序进程,您可以再次启动应用程序。开始正确使用它,打开几个活动,然后返回,返回,关闭活动。当您关闭最后一个时,您可以看到之前使用过的活动。

第一个问题:为什么我的活动在操作系统杀死应用程序后仍然处于后台?

第二个问题:如何解决这个问题?

4 个答案:

答案 0 :(得分:3)

  

为什么我的活动在操作系统杀死应用程序后仍然处于后台?

这是设计的。在Android中,即使包含进程被终止,应用程序也永远不会死亡。默认情况下会保存应用程序的上次已知状态,这样当用户返回应用程序时,他可以从之前停止的位置恢复。

  

如何解决这个问题?

首先,您需要考虑这是否真的是一个问题。由于这是默认行为,因此您必须考虑框架设计人员在编写此行为时的想法,以及想要的内容是否真的适合Android应用程序。

如果您认为 适合您的应用的要求,那么您可以执行以下两项操作之一:

1。添加

android:clearTaskOnLaunch = true
android:excludeFromRecents = true
android:finishOnTaskLaunch = true
android:noHistory = true

到应用清单中的根Activity标记,并将android:noHistory = true添加到所有您的Activity标记。

2. :像这样开始所有Activity

Intent i = new Intent(this, NextActivity.class);
i.setFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TASK | FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
finish();

这基本上可以确保任何应用Activity NO 历史记录。

答案 1 :(得分:1)

按主页按钮不会关闭应用程序。活动仍在筹码中。

您可以使用启动模式修改此行为。

详细了解back stack activity launch modes

答案 2 :(得分:0)

您可以使用startActivityForResult代替startActivity 这不会在最近的应用程序中创建活动实例。

答案 3 :(得分:0)

尝试这种方法:

1.为主启动器制作徽标活动。创建徽标活动后,将意图定位活动:

public class LogoActivity extends Activity
{

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        Context context = this;

        Intent intent = new Intent(context, MainActivity.class);
        context.startActivity(intent);
        finish();

    }
}
  1. 编辑清单,为徽标活动添加android:launchMode =“singleTask”。 例如:
  2. <activity android:name=".LogoActivity"
              android:launchMode="singleTask">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    

    但是这种方法存在一个缺陷:当从os桌面启动应用程序(没有被os杀死)时,它总是重新打开主要活动。