Android “如何知道”;Don';“保持活动”;是否在ICS中启用?
如何在设置中知道“不保留活动”选项通过代码在ics中启用。如果处于启用状态,如何防止该活动 注意:我在应用程序中使用了更多的活动。由于这些设置,如果我将一个活动移动到另一个活动,则第一个活动将被销毁。我可以将数据保存在onSaveInstanceState上。如果不使用保存的实例状态,有什么方法可以Android “如何知道”;Don';“保持活动”;是否在ICS中启用?,android,android-4.0-ice-cream-sandwich,Android,Android 4.0 Ice Cream Sandwich,如何在设置中知道“不保留活动”选项通过代码在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();
}