본문 바로가기
Android

안드로이드 스튜디오,JAVA] 액티비티 변경에 따른 스택관리

by 김마리님 2020. 7. 22.

만약에 메뉴 1 -> 메뉴 2로 넘어가는 스택의 경우 상관 없지만, 메뉴 1- > 메뉴 1로 움직이는 경우 두 액티비티를 동시에 올리면 스택의 낭비가 심해진다. 따라서, 같은 액티비티로 넘어갈 때 같은 액티비티를 띄우지 않게끔 스택관리를 해야한다.

 

다음 코드는 네비게이션에서 액티비티를 변경하는 클래스를 구현한 코드이다.

package com.mary.navigationintentex01;

import android.content.Context;
import android.content.Intent;
import android.view.MenuItem;

import androidx.annotation.NonNull;

import com.google.android.material.navigation.NavigationView;

public class NavigationViewHelper {
    public static void enableNavigation(final Context context, NavigationView view){
        view.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                if(item.getItemId()==R.id.menu1){
                    Intent intent=new Intent(context, MainActivity.class);
                    intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
                    context.startActivity(intent);
                }else if(item.getItemId()==R.id.menu2){
                    Intent intent=new Intent(context, SubActivity.class);
                    intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
                    context.startActivity(intent);
                }
                return true;
            }
        });
    }
}

addFlag를 통해 동일한 플래그가 발생 시 싱글탑 속성을 걸어두면 두 액티비티 중 위의 것만 스택에 남게 된다.

 

이걸 어떻게 확인 가능할까

onNewIntent 속성으로 확인 가능하다.

  @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        Log.d(TAG, "onNewIntent: 호출");
    }

다음 코드를 이용해보면, 다른 액티비티로 넘어갈 때는 동작하지 않지만 같은 액티비티로 움직일때는 호출된다.

반응형