본문 바로가기
AOS🤖/Java

[AOS-Java] onNewIntent 개념 및 사용법

by 텅빈비니 2024. 3. 5.
반응형

안녕하세요🐶

빈지식 채우기의 비니🙋🏻‍♂️ 입니다.

 

오늘은 onNewIntent 에 대해 알아보도록 하겠습니다.


1. 개요

 

Activity  |  Android Developers

 

developer.android.com

onNewIntent 공식 홈페이지

onNewIntent() 란,
AndroidManifest.xml 에서 선언한 Activity의 launchMode를 singleTop 으로 설정하거나,
FLAG_ACTIVITY_SINGLE_TOP 플래그를 썻을 경우,
Activity 스택의 최상위 Activity 가 새로운 인텐트를 통해 재시작 될 때 호출되는 메서드입니다.

 

이 메서드가 사용되는 이유는 아래와 같이 설명이 가능하다.

  • 인텐트 업데이트
    • 실행 중이던 Activity 가 새 인텐트로 재시작 될 때, 이 새로운 인텐트에 포함된 데이터를 처리하기 위해 사용
  • Activity 상태 유지
    • singleTop 또는 singleTask 로 luanchMode가 설정된 경우, 해당 Activity가 최상단에 있을 때 새 인탠트로 재시작되는 경우 기존 액티비티 인스턴스를 재사용한다.

2. 사용법

테스트 화면

  1. MainAcitivty 와 TestActivity 를 생성한다
    • TestActivity는 launchMode가 singleTop 으로 설정
  2. MainActivity 의 New Intent 버튼 클릭 시, 새로운 인탠트를 생성하여 TestActivity 호출
  3. TestActivity 의 new intent2 버튼 클릭 시, 새로운 인탠트를 생성하고 데이터를 넣어 TestActivity 재호출
    • 해당 작업에서 onNewIntent() 메서드 호출

launchMode 설정

  • AndroidManifest.xml 에서 launchMode 설정
// MainActivity

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void onButtonClicked(View v) {
        Intent intent = new Intent(this, TestActivity.class);	// 인탠트 생성
        startActivity(intent);
    }
}
  • 새로운 인탠트를 생성하여 TestActivity 를 호출한다.
// TestActivity

public class TestActivity extends AppCompatActivity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);

        Log.d(this.getClass().getName(), "onCreate 실행");
    }

    public void onButton2Clicked(View v) {
        Intent intent = new Intent(this, TestActivity.class);	// 인탠트 생성
        intent.putExtra("test", 10);	// 데이터 포함
        startActivity(intent);
    }

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

        Log.d(this.getClass().getName(), "onResume 실행");
    }

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);

        Log.d(this.getClass().getName(), "onNewIntent 실행");
    }
}
  • 새로운 인탠트 생성 후, 데이터를 추가 ( putExtra ) 하여 TestActivity 를 재호출한다.
  • singleTop 으로 설정되어 있기 때문에 onNewIntent() 메서드가 호출된다.

첫 번째 TestActivity 호출
두 번째 TestActivity 재호출


감사합니다.


참고

반응형

'AOS🤖 > Java' 카테고리의 다른 글

[AOS-Java] onActivityResult 개념 및 사용법  (2) 2024.03.05