728x90
안녕하세요,
오늘은 FLAG_ACTIVITY_SINGLE_TOP 를 사용하여 동일한 액티비티를 재사용 하는 경우,
액티비티에 전달하는 인텐트 값을 onNewIntent 를 통해 업데이트 해보겠습니다.
새로운 액티비티를 실행하게 되면, 생명주기는 onCreate -> onStart -> onResume 순서로 실행됩니다.
그러나, FLAG_ACTIVITY_SINGLE_TOP 를 사용하여 동일한 액티비티를 다시 실행하는 경우, onPause -> onNewIntent -> onResume 순서로 실행됩니다.
getIntent() 는 onCreate 에서 받아온 인텐트 정보를 출력해주므로,
새로운 인텐트 정보를 사용하기 위해서는 onNewIntent에서 받은 인텐트를 기존 정보에 업데이트 해야 합니다.
아래 예제를 통해 onNewIntent 로 업데이트 된 인텐트 정보를 받아오는 것과 getIntent() 값이 유지되는 것을 확인할 수 있습니다.
xml 파일 코드(intent_main.xml )
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@color/black"
android:textSize="20dp" />
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="20dp"
android:text="Button" />
<EditText
android:id="@+id/editTextText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:textSize="20dp"
android:inputType="text"
android:hint="텍스트를 입력해주세요"
/>
</LinearLayout>
레이아웃 xml 파일 코드(MainActivity.xml)
public class MainActivity extends AppCompatActivity {
private Button button;
private EditText editTextText;
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.intent_main);
textView = findViewById(R.id.textView);
button = findViewById(R.id.button);
editTextText = findViewById(R.id.editTextText);
textView.setText("첫번째 액티비티");
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, intentActivity.class);
intent.putExtra("send_text",editTextText.getText().toString());
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
}
});
}
}
레이아웃 xml 파일 코드(intentActivity.xml)
public class intentActivity extends AppCompatActivity {
private Button button;
private EditText editTextText;
private TextView textView;
Intent mintent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.intent_main);
textView = findViewById(R.id.textView);
button = findViewById(R.id.button);
editTextText = findViewById(R.id.editTextText);
mintent= getIntent();
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(intentActivity.this, intentActivity.class);
intent.putExtra("send_text",editTextText.getText().toString());
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
}
});
}
@Override
protected void onResume() {
super.onResume();
String getText = mintent.getStringExtra("send_text");
textView.setText("새로운 인텐트 값:"+ getText+" \n getIntent() 값:"+ getIntent().getStringExtra("send_text"));
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
mintent=intent;
editTextText.setText("");
}
}
'안드로이드 자바' 카테고리의 다른 글
[JAVA][Android] 안드로이드에서 URI를 전송 가능한 데이터 형태로 변환하기 (0) | 2024.09.06 |
---|---|
[JAVA][Android] 이미지뷰 원으로 만들기 / 프로필 사진처럼 만들기 (2) | 2024.09.02 |
[JAVA][Android] 안드로이드에서 파일 읽고 쓰기 (0) | 2024.08.30 |
[Android][JAVA] NavigationBar 이용하여 Fragment 간 이동하기 (0) | 2024.08.29 |
[JAVA][Android] 알림(Notification) 그룹 클릭 이벤트 감지하기 (0) | 2024.08.23 |