我的应用程序中有两个退出方案: -
1)每当用户连续3次输入错误密码时,我的应用程序应退出并且必须启动gps通知。为此,我编写了如下代码: -
if(value.length() >= authenticationCode.length() && !value.equals(authenticationCode))
{
dataEnteredEditText.setError("Invalid Code!!!");
dataEnteredEditText.setText(AntiTheftConstant.EMPTY_STRING);
countAttempts++;
if(countAttempts == 3)
{
SharedPreferences.Editor editor = sharedPref.edit();
editor.putBoolean(AntiTheftConstant.USER_AUTHENTICATION_STATUS, false);
editor.commit();
registerForLocationUpdates();
dataEnteredEditText.removeTextChangedListener(this);
startProcessForAuthenticationFailure();
moveTaskToBack(true);
}
}
moveTaskToBack()
最小化我的活动并将其移至后台。但我不想要这种行为。我希望我的应用程序完全退出,在最小化状态或后台没有活动。
2)要求用户输入一次性密码(OTP),如果输入正确的密码,GPS通知应该停止,我的应用程序应该再次退出。对于这个场景,我写了以下代码: -
if((authenticationCode.equals(sharedPref.getString(AntiTheftConstant.GENERATED_PASSWORD, AntiTheftConstant.DEFAULT_APPLICATION_AUTHENTICATION_CODE))))
{
editor.putBoolean(AntiTheftConstant.USER_AUTHENTICATION_STATUS, true);
editor.commit();
stopService(new Intent(applicationContext, EmailMonitoringService.class));
stopService(new Intent(applicationContext, LocationDetector.class));
AlarmManager am=(AlarmManager)applicationContext.getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(applicationContext, TheftAlarmReceiver.class);
PendingIntent pi = PendingIntent.getBroadcast(applicationContext, 0, i, PendingIntent.FLAG_UPDATE_CURRENT);
am.cancel(pi);
// Intent intent = new Intent(Intent.ACTION_MAIN);
//
// intent.addCategory(Intent.CATEGORY_HOME);
//
// intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// startActivity(intent);
this.finish();
}
我在下面尝试了两个代码块: -
this.finish()
并且
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
但他们都没有正常工作。上面的两个代码块都将我当前的活动移动到后台,但它们都没有使我的应用程序正常退出。
如果您发现上述方法有任何问题,请提出建议。提前谢谢。
答案 0 :(得分:2)
finish()
会将应用程序推送到后台。它没有"退出"应用程序本身,它关闭当前的活动。如果它是唯一的公开活动,它会关闭"申请。
Android决定何时实际发布与活动和应用程序相关的资源,并且良好实践说:" 让Android决定何时放弃资源"。 有关详细信息,请阅读this。
如果您真的 完全清除应用程序(如果您不先关闭某些资源和事件可能会很危险),从技术上讲,可以使用android.os.Process.killProcess(android.os.Process.myPid());
答案 1 :(得分:0)
试试这个 你必须在super.onCreate(...)
之后调用this.finish()答案 2 :(得分:0)
如果你想在活动中完成一些事情,你应该使用:
finish();
如果你想在片段中完成某些事情,你应该使用:
getActivity().finish();