Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android “如何知道”;Don';“保持活动”;是否在ICS中启用?_Android_Android 4.0 Ice Cream Sandwich - Fatal编程技术网

Android “如何知道”;Don';“保持活动”;是否在ICS中启用?

Android “如何知道”;Don';“保持活动”;是否在ICS中启用?,android,android-4.0-ice-cream-sandwich,Android,Android 4.0 Ice Cream Sandwich,如何在设置中知道“不保留活动”选项通过代码在ics中启用。如果处于启用状态,如何防止该活动 注意:我在应用程序中使用了更多的活动。由于这些设置,如果我将一个活动移动到另一个活动,则第一个活动将被销毁。我可以将数据保存在onSaveInstanceState上。如果不使用保存的实例状态,有什么方法可以 提前谢谢 那个标志就是因为这个原因而存在的。这样做的目的是检查并确保你的应用程序能够处理被破坏的活动。您不能覆盖它,因为在现实世界中,如果设备内存不足,即使没有该标志,它也可能发生。您需要编写一些代

如何在设置中知道“不保留活动”选项通过代码在ics中启用。如果处于启用状态,如何防止该活动

注意:我在应用程序中使用了更多的活动。由于这些设置,如果我将一个活动移动到另一个活动,则第一个活动将被销毁。我可以将数据保存在onSaveInstanceState上。如果不使用保存的实例状态,有什么方法可以


提前谢谢

那个标志就是因为这个原因而存在的。这样做的目的是检查并确保你的应用程序能够处理被破坏的活动。您不能覆盖它,因为在现实世界中,如果设备内存不足,即使没有该标志,它也可能发生。您需要编写一些代码来处理此案例,而不是覆盖它。

提问者有权提出一个很好的问题,但仍然没有得到回答:-)

我用一个简单的例子测试了这个问题。事实上,当勾选“不保留活动”选项时,活动将被终止。例如:Mainactivity调用子活动。主要活动被终止。按下子活动将导致重新启动主活动。这可能是一个问题,当mainactivity正在执行长时间运行的任务(如加载内容)时


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

导入以下包

import android.provider.Settings;
然后,您可以使用以下代码检查该选项是否为启用:

Settings.System.getInt(getContentResolver(),Settings.System.ALWAYS_FINISH_ACTIVITIES, 0);
您可以使用以下方法进行更改:

Settings.System.putInt(getContentResolver(),Settings.System.ALWAYS_FINISH_ACTIVITIES,  0);
希望能有帮助

    Settings.System.ALWAYS_FINISH_ACTIVITIES 
现在已弃用,因此您应该使用

    Settings.Global.ALWAYS_FINISH_ACTIVITIES.equals("1")
检查此选项是否已启用

更新(感谢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;
}
公共静态布尔值为finishActivitiseOptionEnabled(上下文){
int结果;
if(Build.VERSION.SDK\u INT
我同意@Kaediil的观点,即在选中“不保留活动”选项时,android应用程序必须运行良好

Bu由于某些原因,如果您必须检查“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;
    }
}
如果alwaysFinishActivities选项被选中,并且您希望它被取消选中 您可以将用户引导到“设置->开发人员选项”以取消选中该值。(这比获得额外权限并通过编程设置此值要好)


int value=Settings.System.getInt(getContentResolver(),Settings.System.ALWAYS\u FINISH\u活动,0)

您还可以使用意图,每次都杀死该活动。只需在onBackPressed()中调用ReturnToMain,就可以解决“不保留活动”的问题。这一直是我在国外使用外国手机时面临的问题之一

public void ReturnToMain() {
    Intent view_user = new Intent(PanicAddUpdate.this, PanicAddMain.class);
    view_user.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(view_user);
    finish();
}
另一个选择是下面的@aegean解决方案。您必须将用户引导到“设置->开发人员选项”以取消选中该值。这是我在对话框中使用的方法。请确保添加finish(),这样当他们按下后退按钮时应用程序不会崩溃,或者在按下home按钮后尝试重新启动应用程序

public void showDeveloperOptionsScreen(){

    new AlertDialog.Builder(this)
    .setTitle("Developer Options Detected!")
    .setMessage("In order for Sender to work properly, please uncheck the \"Don't keep activities\" option.")
    .setNegativeButton(android.R.string.no, null)
    .setPositiveButton(android.R.string.yes, new OnClickListener() {

        public void onClick(DialogInterface arg0, int arg1) {
            Intent intent = new Intent(android.provider.Settings.ACTION_APPLICATION_DEVELOPMENT_SETTINGS);
            intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
            startActivity(intent);
            finish();
        }
    }).create().show();
}

有没有办法通过代码找到“不保留活动”设置…?我不知道,再说一遍-你为什么要这样做?你不应该把这个标志作为做任何事情的理由。我有一个简单的例子:一个有偏好活动的应用程序。设置此单元格参数后,单击选项按钮立即关闭首选项。。。知道要当心的用户是有用的。在这里,我不同意,开发者应该能够检查此设置,并适当地提示用户应用程序可能会在该设置打开时出现错误行为。即使开发人员编写了一个完美的应用程序,该应用程序在活动重新启动后仍然有效,但在您的活动启动另一个活动且另一个活动属于另一个流程(例如gallery)的情况下,此设置也会导致问题,即使使用startActivityForResults,Android也将关闭我们的活动,我们永远无法从Gallery活动中获得活动结果。@KevinKrumwiede试用我提到的测试用例,然后声称人们“不称职”。开发人员最好了解其应用程序无法工作的系统限制,而不是让用户对某些东西无法工作的原因一无所知。你没有抓住要点。该选项可能未设置,但在内存不足的手机上,效果可能完全相同。操作系统将立即删除这些活动以回收内存,因此即使未设置标志,您也可能会发生完全相同的事情。同意@Kaediil。不管它是否开启,基于内存不足或其他各种情况,同样的行为也可能发生。你的应用程序应该在打开时正常运行。即使是内存不足的手机也不会像选中此选项那样强大。以Facebook登录为例,它是在一个单独的活动中启动的,永远不会在选中“不要保持活动”的情况下工作,但是,它可以在所有手机上工作。它不应该在正常情况下设置,但是设置它的唯一结果应该是应用程序可能会使用更多的CPU和电池,因为它们会不断地重新创建活动。从用户的角度来看,如果启用此选项,应用程序应该能够正常运行。如果他们没有这样做,开发人员就做错了。我收到了警告:设置始终\u完成\u活动已从android.provider.Settings.System移动到android.provider.Settings.Global,返回只读值。设置always_finish_活动已从android.provider.Settings.System移动到android.provider.Se
public void showDeveloperOptionsScreen(){

    new AlertDialog.Builder(this)
    .setTitle("Developer Options Detected!")
    .setMessage("In order for Sender to work properly, please uncheck the \"Don't keep activities\" option.")
    .setNegativeButton(android.R.string.no, null)
    .setPositiveButton(android.R.string.yes, new OnClickListener() {

        public void onClick(DialogInterface arg0, int arg1) {
            Intent intent = new Intent(android.provider.Settings.ACTION_APPLICATION_DEVELOPMENT_SETTINGS);
            intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
            startActivity(intent);
            finish();
        }
    }).create().show();
}