onResume вызывается много раз даже после того, как он выходит на передний план. Зачем? - PullRequest
0 голосов
/ 17 июня 2020

Я хочу вызывать onResume только тогда, когда мое приложение переходит в фоновый режим onPause. У меня есть два Activity A и B. При переключении с Activity B на A мне нужно предотвратить onPause и onResume. Если моего приложения больше нет на экране или оно переходит в фоновое состояние, тогда следует вызывать только onResume и onPause. Ниже мой фрагмент кода. помогите пожалуйста!

    BiometricManager mBiometricManager;
    UserSession userSession;
    boolean shouldExecuteOnFirstTime;
    boolean isPaused = true;
    private Dialog dialog;
    private ActivityNewMainBinding binding;
    SharedPreferences mPrefs;
    SharedPreferences.Editor prefsEditor;

    @Override
    protected void onPause() {
        super.onPause();
        PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
        isPaused = pm.isScreenOn();

      }


    @Override
    protected void onPostResume() {
        super.onPostResume();
       /* */
        if(isPaused)
        {
        if (shouldExecuteOnFirstTime) {
            if (userSession.isLoggedInV2()) {
                Intent intent = new Intent(this, LocksWithoutKeystoreActivity.class);
                startActivity(intent);
                mBiometricManager = new BiometricManager.BiometricBuilder(getApplicationContext())
                    .setTitle(getString(R.string.biometric_title))
                    .setDescription(getString(R.string.biometric_description))
                    .setNegativeButtonText(getString(R.string.biometric_negative_button_text))
                    .build();
                //start authentication
                mBiometricManager.authenticate(new BiometricCallback() {
                    @Override
                    public void onSdkVersionNotSupported() {
                        Toast.makeText(getApplicationContext(), 
   getString(R.string.biometric_error_sdk_not_supported), 
  Toast.LENGTH_LONG).show();

                    }

                    @Override
                    public void onBiometricAuthenticationNotSupported() {
                        Toast.makeText(getApplicationContext(), getString(R.string.biometric_error_hardware_not_supported), Toast.LENGTH_LONG).show();

                    }

                    @Override
                    public void onBiometricAuthenticationNotAvailable() {
                        Toast.makeText(getApplicationContext(), getString(R.string.biometric_error_fingerprint_not_available), Toast.LENGTH_LONG).show();
                        startActivityForResult(new Intent(android.provider.Settings.ACTION_SETTINGS), 0);


                    }

                    @Override
                    public void onBiometricAuthenticationPermissionNotGranted() {

                    }

                    @Override
                    public void onBiometricAuthenticationInternalError(String error) {

                    }

                    @Override
                    public void onAuthenticationFailed() {

                    }

                    @RequiresApi(api = Build.VERSION_CODES.M)
                    @Override
                    public void onAuthenticationCancelled() {
                        Intent intent = new Intent(getApplicationContext(), LocksWithoutKeystoreActivity.class);
                        startActivity(intent);
                        Toast.makeText(getApplicationContext(), getString(R.string.biometric_cancelled), Toast.LENGTH_SHORT).show();
                        mBiometricManager.cancelAuthentication();

                    }

                    @Override
                    public void onAuthenticationSuccessful() {
                        try {
                            Intent intent = new Intent(getApplicationContext(), MainDashBoardActivity.class);
                            startActivity(intent);
                        } catch (Exception e) {
                            e.printStackTrace();
                        }

                    }

                    @Override
                    public void onAuthenticationHelp(int helpCode, CharSequence helpString) {

                    }

                    @Override
                    public void onAuthenticationError(int errorCode, CharSequence errString) {

                    }
                });

            }
        } else {
            shouldExecuteOnFirstTime = true;
        }
        }

    }

Ответы [ 2 ]

0 голосов
/ 17 июня 2020

onResume вызывается каждый раз, когда ваша активность получает фокус, возможно, вы хотите переместить свой код в onStart, который вызывается только один раз, когда приложение выходит на передний план

0 голосов
/ 17 июня 2020

Это нормальное поведение, я отсылаю вас к android activity & fragment жизненным циклам:

enter image description here

Это нормально, когда действие вызывает onPause () при переключении между действиями. Вместо этого вы можете искать методы onStop () или onDestroy () как более подходящие, хотя я подозреваю, что ваш основной дизайн может быть ошибочным (topi c для отдельного вопроса). Я предлагаю вам перефразировать свой вопрос, чтобы вместо этого сообщить нам, какого поведения вы пытаетесь достичь, и включить код, который вы в настоящее время используете. должен относиться к жизненному циклу фрагмента, который связан с действием, к которому он привязан:

введите здесь описание ссылки

В этом случае вы можете обнаружить, что onPause ( ) для фрагмента вызывается, даже если базовая Activity не изменяется. Это опять же нормальное поведение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...