应用程序在执行调用活动finish()方法时不退出

时间:2014-03-11 17:29:32

标签: android service

我的应用程序中有两个退出方案: -

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);

但他们都没有正常工作。上面的两个代码块都将我当前的活动移动到后台,但它们都没有使我的应用程序正常退出。

如果您发现上述方法有任何问题,请提出建议。提前谢谢。

3 个答案:

答案 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();