반응형
예제 파일 다운로드
- 멀티 액티비티 테스트 앱은 깃허브에서 다운로드 하실 수 있습니다.
https://github.com/luvris2/Android-MultiActivityTest-App
액티비티 (Activity)
- 안드로이드에서 액티비티는 앱의 화면을 뜻함
- 기능을 담당하는 Java 파일과 UI를 담당하는 xml 파일이 존재
- 하나의 Java파일에 하나의 xml파일이 연결되어 하나의 화면을 구성
액티비티간의 이동 소스 코드
- 인텐트 객체를 파라미터와 함께 생성
- 첫번째 매개변수는 현재 액티비티, this 사용
- 두번째 매개변수는 다른 액티비티, class 사용
- startActivity( 인텐트 객체 ) : 지정한 액티비티로 이동
- 단, 이동 전의 액티비티는 소멸되지 않기 때문에(onDestroy) 리소스 관리에 신경써서 구성
Intent intent = new Intent(MainActivity.this, OtherActivity.class);
startActivity(intent);
세 개의 액티비티를 이동하는 앱 만들기
+ 액티비티 라이프 사이클을 함께 로그로 표기하여 리소스 관리를 좀 더 쉽게 이해해봅시다.
기능 설계
1. 첫번째 액티비티
- 버튼을 누르면 두번째 액티비티로 이동
- onResume, onPause, onDestroy 상태 돌입시 로그 출력
2. 두번째 액티비티
- 뒤로가기 (백) 버튼을 누르면 액티비티간 이동을 선택 (첫번째/세번째)
- 기존의 뒤로가기 버튼의 기능을 재정의, 즉 액티비티가 종료되지 않음
- onResume, onPause, onDestroy 상태 돌입시 로그 출력
3. 세번째 액티비티
- 아무런 기능을 구현하지 않고 뒤로가기 버튼으로 액티비티를 종료하여 액티비티 라이프 사이클 로그 확인해보기
- onResume, onPause, onDestroy 상태 돌입시 로그 출력
레이아웃 UI 설계
1. 첫번째 액티비티
2. 두번째 액티비티
3. 세번째 액티비티
코드 설계 (Android Studio)
- MainActivity.java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn = findViewById(R.id.button);
// 버튼 클릭 이벤트
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// 두번째 액티비티로 이동
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivity(intent);
}
});
}
@Override
protected void onResume() {
super.onResume();
Log.i("MyMultiple", "Main : onResume");
}
@Override
protected void onPause() {
super.onPause();
Log.i("MyMultiple", "Main : onPause");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.i("MyMultiple", "Main : onDestroy");
}
}
- SeconndActivity.java
public class SecondActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
}
// 뒤로 가기 버튼 이벤트
@Override
public void onBackPressed() {
//super.onBackPressed(); 기존의 뒤로가기 기능 비활성화
// 대화상자 출력
AlertDialog.Builder alert = new AlertDialog.Builder(SecondActivity.this);
alert.setTitle("액티비티 이동");
alert.setMessage("몇번째 액티비티로 이동하시겠습니까?");
// 대화상자 '세번째' 이벤트, 세번째 액티비티로 이동
alert.setPositiveButton("세번째", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Intent intentToThird = new Intent(SecondActivity.this, ThirdActivity.class);
startActivity(intentToThird);
}
});
// 대화상자 '첫번째' 이벤트, 첫번째 액티비티로 이동
alert.setNegativeButton("첫번째", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Intent intentToFirst = new Intent(SecondActivity.this, MainActivity.class);
startActivity(intentToFirst);
}
});
// 대화상자 버튼을 누르지 않으면 화면이 넘어가지 않게 설정
alert.setCancelable(false);
// 대화상자 화면에 표시
alert.show();
}
@Override
protected void onResume() {
super.onResume();
Log.i("MyMultiple", "Second : onResume");
}
@Override
protected void onPause() {
super.onPause();
Log.i("MyMultiple", "Second : onPause");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.i("MyMultiple", "Second : onDestroy");
}
}
- ThirdActivity.java
public class ThirdActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_third);
}
// 세번째 액티비티는 로그만 기록
@Override
protected void onResume() {
super.onResume();
Log.i("MyMultiple", "Third : onResume");
}
@Override
protected void onPause() {
super.onPause();
Log.i("MyMultiple", "Third : onPause");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.i("MyMultiple", "Third : onDestroy");
}
}
실행 화면
- 순서대로 실행 진행
- 액티비티 화면과 로그 화면 같이 출력
- 편의상 로그는 축약해서 표현
1. 앱 실행
- 리소스
- 1. 첫번째 액티비티
- 액티비티 라이프 사이클
- 첫번째 액티비티는 onResume 상태
MyMultiple: Main : onResume
2. 버튼을 클릭하여 두번째 액티비티로 이동
- 리소스
- 1. 첫번째 액티비티
- 2. 두번째 액티비티
- 액티비티 라이프 사이클
- 첫번째 액티비티는 onPause 상태
- 두번째 액티비티는 onResume 상태
MyMultiple: Main : onPause
MyMultiple: Second : onResume
3. 뒤로가기 버튼을 눌러서 세번째 액티비티로 이동
- 리소스
- 1. 첫번째 액티비티
- 2. 두번째 액티비티
- 3. 세번재 액티비티
- 액티비티 라이프 사이클
- 첫번째 액티비티는 onPause 상태
- 두번째 액티비티는 onPause 상태
- 세번째 액티비티는 onResume 상태
// 현재 행동으로 남겨진 로그, 첫번재 액티비티는 아직 onPause 상태
MyMultiple: Second : onPause
MyMultiple: Third : onResume
4. 뒤로가기 버튼을 이용하여 세번째 액티비티 종료
- 리소스
- 1. 첫번째 액티비티
- 2. 두번째 액티비티
- 액티비티 라이프 사이클
- 첫번째 액티비티는 onPause 상태
- 두번째 액티비티는 onResume 상태
- 세번재 액티비티는 onPause 상태되고 다른 액티비티가 onResume 상태가 되면 onDestroy 상태로 전환
// 현재 행동으로 남겨진 로그, 첫번재 액티비티는 아직 onPause 상태
MyMultiple: Third : onPause
MyMultiple: Second : onResume
MyMultiple: Third : onDestroy
5. 뒤로가기 버튼을 이용하여 첫번째 액티비티로 이동
- 리소스
- 1. 첫번째 액티비티
- 2. 두번째 액티비티
- 액티비티 라이프 사이클
- 첫번째 액티비티는 onResume 상태
- 두번째 액티비티는 onPause 상태
MyMultiple: Second : onPause
MyMultiple: Main : onResume
6. 뒤로가기 버튼을 이용하여 첫번째 액티비티 종료
- 리소스
- 1. 두번째 액티비티
- 액티비티 라이프 사이클
- 첫번째 액티비티는 onPause 상태되고 다른 액티비티가 onResume 상태가 되면 onDestroy 상태로 전환
- 두번째 액티비티는 onResume 상태
MyMultiple: Main : onPause
MyMultiple: Second : onResume
MyMultiple: Main : onDestroy
참고 : 액티비티 라이프 사이클
안드로이드 액티비티 라이프 사이클의 각각의 메소드는 아래의 포스팅에서 좀 더 자세히 확인하실 수 있습니다.
https://luvris2.tistory.com/257
반응형