На спине нажмите заставку, показывающую вместо последнего открытого экрана

Я делаю одно приложение для Android. Когда я открываю заставку приложения, показывая, а затем он переходит в основное состояние. Теперь, если пользователь нажмет кнопку "Назад" и откроет приложение из кнопки свертывания. он показывает всплеск снова вместо основной активности. Кто-нибудь может помочь мне решить это? Ниже приведен код активности всплеска, пожалуйста, проверьте и дайте решение.

всплеск

 new Handler().postDelayed(new Runnable() {

            @Override
            public void run() {

                fcm_id = FirebaseInstanceId.getInstance().getToken();
                session = new SessionManager(getApplicationContext());

                usermyid=session.userID();
                if(usermyid!=null)
                {
                    System.out.println("usermyid is not null"+usermyid);
                    usermyid=session.userID();
                    userd=Long.parseLong(usermyid);
                }
                else
                {
                    System.out.println("usermyid is  null"+usermyid);
                    android_id = Settings.Secure.getString(getApplicationContext().getContentResolver(),
                            Settings.Secure.ANDROID_ID);
                    System.out.println("Without Exclude alphabets"+android_id);

                    android_id = android_id.replaceAll("[^\\d.]", "");
                    System.out.println("After Exclude alphabets"+android_id);
                    long x=Long.parseLong(android_id);
                    x*=-1;

                    System.out.println("Final Id" + x);
                    session_id = String.valueOf(x);
                    System.out.println("sessionid in skipactivity" + session_id);
                    session.createLoginSession(session_id);
                    userd=Long.parseLong(session_id);
                }


                if (session.checkLogin()) {


                    if(userd < 0)
                    {
                        System.out.println("It is minus"+userd);

                        prefs = getApplicationContext().getSharedPreferences("MyPrefSKIP", Context.MODE_PRIVATE);
                        boolean rb0 = prefs.getBoolean("skipstuff", false);
                        if(rb0 == true){
                            // Do something
                            System.out.println("SKIP IS TRUE");
                            Intent i = new Intent(getApplicationContext(), MainActivity.class);
                            userid = session.userID();
                            username=session.username();
                            userlastname=session.userlastname();
                            useradd1=session.useradd1();
                            useradd2=session.useradd2();
                            usercity=session.usercity();
                            userstate=session.userstate();
                            userzip=session.userpincode();
                            usercountry=session.usercountry();
                            userphone=session.userphone();
                            usermail=session.useremail();
                            usercounter=session.usercounter();


                            System.out.println("User ID in MAIN : " + userid+username+userlastname+useradd1+useradd2+usercity+userstate+userzip+usercountry);
                            i.putExtra("id", userid);
                            i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
                            startActivity(i);
                            finish();

                        }
                        else
                        {
                            System.out.println("SKIP IS FALSE");
                            //  String forskipid= String.valueOf(userd);
                            Intent menuLeft = new Intent(SplashActivity.this, SkipActivity.class);
                            //menuLeft.putExtra("id",session_id);
                            startActivity(menuLeft);
                        }
                    }
                    else
                    {
                        System.out.println("It is plus"+userd);
                        Intent i = new Intent(getApplicationContext(), MainActivity.class);
                        userid = session.userID();
                        username=session.username();
                        userlastname=session.userlastname();
                        useradd1=session.useradd1();
                        useradd2=session.useradd2();
                        usercity=session.usercity();
                        userstate=session.userstate();
                        userzip=session.userpincode();
                        usercountry=session.usercountry();
                        userphone=session.userphone();
                        usermail=session.useremail();
                        usercounter=session.usercounter();


                        System.out.println("User ID in MAIN : " + userid+username+userlastname+useradd1+useradd2+usercity+userstate+userzip+usercountry);
                        i.putExtra("id", userid);
                        i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
                        startActivity(i);
                        finish();
                    }


                } else {


                    System.out.println("THIS SHOULD NOT BE SHOW");

                }

                //GetNotification();
                AddDeviceToken();
                SplashActivity.this.finish();
            }
        }, SPLASH_TIME_OUT);

    }

Основная деятельность

 @Override
    public void onBackPressed() {


        if(getSupportFragmentManager().getBackStackEntryCount()>1){
            getSupportFragmentManager().popBackStack();
        }else
        if(getSupportFragmentManager().getBackStackEntryCount()==0){
            this.finish();
        }
    }


@Override
    protected void onResume() {
        super.onResume();
        viewtocart();
    }

    @Override
    protected void onStart() {
        GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestEmail()
                .build();
        mGoogleApiClient = new GoogleApiClient.Builder(this)
                .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
                .build();
        mGoogleApiClient.connect();
        super.onStart();
    }

2 ответа

Решение

Обычно в методе onBackPress пользователь не должен переопределять его. Он обычно поддерживается системой Android для завершения действий. Измените свой метод onBackPressed() следующим образом и убедитесь, что он вам помогает.

@Override
public void onBackPressed() {

    if (getSupportFragmentManager().getBackStackEntryCount() > 0 &&
            getSupportFragmentManager().findFragmentById(R.id.your_container)!=null) {

        Fragment fragment= getSupportFragmentManager().findFragmentById(R.id.your_container);
        if(fragment.getClass().getSimpleName().equalsIgnoreCase(FragmentTest.class.getSimpleName())){
            getSupportFragmentManager().popBackStackImmediate();
        }

    }else {
        super.onBackPressed();
    }

}

РЕДАКТИРОВАТЬ:

кнопку назад и откройте приложение от кнопки сворачивания

Проблема здесь. Так как вы сначала запустили всплеск активности, а затем, переходя на main, вы очищаете флаг и заканчиваете всплеск. Так что задний стек содержит только одно действие.

Когда вы нажимаете кнопку "Назад" в главном действии, приложение завершает свою работу вместо того, чтобы показывать какие-либо действия с обратным стеком. Он находится в mainacctivity, когда вы нажимаете назад, вызывается метод onPause(),onStop() и onDestroy().

Причина, по которой всплеск вызывается снова, когда вы снова открываете приложение из недавних, заключается в том, что приложение запускается снова, и всплеск является первым действием. Отсюда это показано.

Нажатие кнопки "Назад" в домашней активности приводит к выходу из приложений, но нажатие кнопки "Домой" минимизирует ваше приложение. Свернутое приложение открывает приложение с того места, где вы его оставили, так как оно будет в памяти.

Чтобы узнать больше о жизненных циклах деятельности, перейдите по этой ссылке https://developer.android.com/guide/components/activities/activity-lifecycle.html

В вашей SplashActivity добавьте finish(), когда вы собираетесь запустить Intent для mainActivity.

В вашей MainActivity реализуйте onBackPresssed(),onDestroy() и onResume();

Надеюсь, это поможет.

Другие вопросы по тегам