如何在ICS中启用"不要保持活动"?

Kar*_*amu 13 android android-4.0-ice-cream-sandwich

如何通过代码在ics中启用"不要保持活动"选项.如果已启用,则如何阻止该活动.

注意:我在我的应用程序中使用了更多活动.因为我将一个活动移动到另一个活动,所以第一个活动被销毁.我可以将我的数据保存在onSaveInstanceState上.没有使用保存的实例状态有任何方法可以做...

提前致谢..

小智 20

导入以下包

import android.provider.Settings;
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用以下代码检查是否启用该选项:

Settings.System.getInt(getContentResolver(),Settings.System.ALWAYS_FINISH_ACTIVITIES, 0);
Run Code Online (Sandbox Code Playgroud)

你可以改变它:

Settings.System.putInt(getContentResolver(),Settings.System.ALWAYS_FINISH_ACTIVITIES,  0);
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你


Kae*_*iil 13

正是出于这个原因,那个国旗就在那里.我们的想法是检查并确保您的应用处理其活动被销毁.你无法覆盖它,因为在现实世界中,如果设备内存不足,即使没有该标志也可能发生.你需要编写代码来处理这种情况而不是覆盖它.


BAZ*_*TED 13

    Settings.System.ALWAYS_FINISH_ACTIVITIES 
Run Code Online (Sandbox Code Playgroud)

现在已弃用,因此您应该使用

    Settings.Global.ALWAYS_FINISH_ACTIVITIES.equals("1")
Run Code Online (Sandbox Code Playgroud)

检查是否启用了此选项

更新(感谢Aviv Ben Shabat评论):

处理我创建了一个方法的所有sdk版本:

  public static boolean isFinishActivitiesOptionEnabled(Context context) {
    int result;
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) {
        result = Settings.System.getInt(context.getContentResolver(), Settings.System.ALWAYS_FINISH_ACTIVITIES, 0);
    } else {
        result = Settings.Global.getInt(context.getContentResolver(), Settings.Global.ALWAYS_FINISH_ACTIVITIES, 0);
    }

    return result == 1;
}
Run Code Online (Sandbox Code Playgroud)


Dev*_*rim 8

我同意@Kaediil认为Android应用程序必须正常工作,同时选中"不要保持活动"选项.

因某些原因如果你必须检查"alwaysFinishActivities"值,你可以使用下面的代码;

/**
 * returns true if AlwaysFinishActivities option is enabled/checked
 */
private boolean isAlwaysFinishActivitiesOptionEnabled() {
    int alwaysFinishActivitiesInt = 0;
    if (Build.VERSION.SDK_INT >= 17) {
        alwaysFinishActivitiesInt = Settings.System.getInt(getApplicationContext().getContentResolver(), Settings.Global.ALWAYS_FINISH_ACTIVITIES, 0);
    } else {
        alwaysFinishActivitiesInt = Settings.System.getInt(getApplicationContext().getContentResolver(), Settings.System.ALWAYS_FINISH_ACTIVITIES, 0);
    }

    if (alwaysFinishActivitiesInt == 1) {
        return true;
    } else {
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果选中alwaysFinishActivities选项并且您希望取消选中它;

您可以将用户定向到"设置 - >开发人员选项"以取消选中该值.(这比获得额外的可怕权限并以编程方式设置此值更好)

/**
 * shows Settings -> Developer options screen
 */
private void showDeveloperOptionsScreen(){
    Intent intent = new Intent(android.provider.Settings.ACTION_APPLICATION_DEVELOPMENT_SETTINGS);
    intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
    startActivity(intent);
}
Run Code Online (Sandbox Code Playgroud)


mcf*_*oft 7

提问者是对的,他有一个很好的问题,但仍未得到回答:-)

我用一个干净的简单例子测试了这个问题.事实是,当选中"不保持活动"选项时,活动将被终止.例如:Mainactivity调用子活动.主要活动被杀死了.按下子活动会导致重新启动Mainactivity.这可能是一个问题,当主要活动正在做诸如加载内容等长期运行的东西时.

我对此的结论."不保留活动"选项是开发人员选项,不应在正常用户条件下设置.因此开发人员应该能够检测到此设置.

  • 你错过了这一点.可能未设置该选项,但在内存较低的手机上,效果可能完全相同.操作系统将立即清除活动以回收内存,因此即使未设置标志,您也可能发生完全相同的事情. (2认同)