눈송이의 개발생활

[Android]Activity 본문

Android

[Android]Activity

꾸지새미언니

1. Activity는 무엇인가?

Activity는 UI 구성을 위해 가장 기본이 되는 요소이다.
Activity는 화면에 view를 표시하기 위한 tool이다.

앱에서는 최소 하나의 activity(MainActivity)가 있어야 하고 앱이 실행되면서 액티비티가 자동으로 실행되면서 사용자에게 UI가 보인다.


안드로이드 스튜디오에서 새로운 프로젝트를 생성하면 기본적으로 MainActivity.javaactivity_main.xml이 있다.

public class MainActivity extends AppCompatActivity {

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

✅ onCreate()

activity가 시작되면 호출되는 메소드. 반드시 앰의 main thread에서 호출해야한다. override할 경우, 꼭 super 클래스에서 호출해야한다.

✅ savedInstances

액티비티가 shut down 되었다가 다시 초기화될 때 전달받는 bundle이다.

✅ setContentView()

해당 액티비티의 view인 layout을 지정해준다.


현재 액티비티와 다른 내용으로 독립적으로 실행되는 화면을 만들고자 한다면 activity 사용하는 것이 좋다 (especially when using "Back Button")

→ 안드로이드 시스템이 새로운 activity를 실행하면 기존에 실행중이던 activity를 "Back-stack" 이라는 곳에 자동 저장하고 뒤로가기 버튼 누르면 스택에서 꺼내와서 실행해준다.


2. Intent

Intent는 컴포넌트간의 통신을 하기 위한 객체이다.
Activity에서 다른 Activity로 넘어갈 때 intent로 데이터 등을 전달하고 받아온다.

//MainActivity.java
Intent intent = new Intent(this, NewActicity.class);
intent.putExtra("name", "이름");
intent.putExtra("number", 123);
intent.putExtra("bool", true);
startActivity(intent);

✅ new Intent(this, NewActicity.class)

  • this : data를 넘겨주는 acitivity 클래스
  • NewActivity.class : data 받을 activity 클래스

✅ putExtra("key", value)

intent 객체에 data 넣는(?) 메소드
key와 value로 값을 넘겨주고 받을 때는 key를 사용해서 받는다.

✅ startAcitivity(intent)

activity의 새로은 인스턴스를 시작하기 위해 쓰는 메소드
해당 메소드를 통해서 Intent가 전달된다.

//NewActivity.java
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_new);

        Intent intent = getIntent();
        String name1 = intent.getStringExtra("name");
        int num1 = intent.getIntExtra("number");
        Boolean bool1 = intent.getBooleanExtra("bool");
}

✅ getIntent()

이전 activity가 전달한 Intent 받아 오는 메소드

✅ get<데이터타입>Extra()

다양한 데이터 타입의 값들을 새로운 activity에서 받을 수 있게 해주는 메소드
"key"를 parameter로 원하는 값들을 가져온다.


📌 MainAcvitiy → NewActivity → MainActivity

//MainActivity.java
public static final int REQUEST_CODE = 100;

Intent intent1 = new Intent(this, NewActicity.class);
startActivityforResult(intent1, REQUEST_CODE);
//NewActivity.java
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_new);

        Intent intent2 = new Intent(this, MainActivity.class);
        intent.putExtra("name", "이름");
        setResult(RESULT_OK, intent2);
        finish();
}
//MainActivity.java
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
        super.onActivityResult(requestCode, resultCode, intent);

        if (requestCode == REQUEST_CODE) {
            if (resultCode != Activity.RESULT_OK) {
                return;
            }
            String name = intent.getStringExtra("name");
        }
}

✅ startActivityForResult()

startActivity의 기능(새로운 액티비티 열어주는 것) + 결과값 전달
resultCode를 사용해서 원하는 기능을 수행할 수 있다.

  • RESULT_OK : 액티비티 실행 성공
  • RESULT_CANCELED : 액티비티 실행 실패

✅ setResult()

Intent를 넘겨받은 activity 클래스에서 다시 MainActivity로 resultCode의 값을 전달한다.
parameter로 (resultCode, 새로운 intent 객체)를 전달한다.

✅ onActivityResult()

이전 액티비티가 resultCode를 보내고 finish되면 실행되는 함수
parameter로 (requestCode, resultCode, intent)를 전달받는다.
맨 처음 startActivityforResult()에서 보낸 REQUEST_CODE와 requestCode가 동일하면 resultCode를 비교해본다.
액티비티 실행이 성공이면(RESULT_OK) intent로 값을 받아 올 수 있다.


3. Activity Life Cycle

Activity Life Cycle

1. onCreate()

  • activity 생성할 때 실행되고 필수적
  • 완료되면 바로 start state가 됨
  • 데이터 목록에 바인딩 함
  • Activity & ViewModel 연결함
  • 클래스 범위 변수 인스턴스화함 (이전 activity의 활동 상태 포함된 Bundle)

2. onStart()

  • UI가 사용자에게 보여짐
  • 매우 빠르게 완료됨
  • 이 콜백이 완료되면 바로 resume 상태로 들어감

3. onResume()

  • 앱과 사용자가 상호작용하는 상태
  • 해당 앱에서 포커스가 떠날 때(ex. 다른 앱으로 이동, 화면 꺼짐 등등)까지 이 상태
  • 방해되는 이벤트 발생하면 pause 상태가 됨

4. onPause()

  • 앱을 방해하는 이벤트가 발생했을 때 상태
  • 실행할 필요가 없는 기능을 모두 정지할 수 있음
  • activity 다시 시작하면 onResume() 메소드 호출

5. onStop()

  • activity가 사용자에게 더 이상 표시되지 않을 때. 필요하지 않은 리소스 해제하거나 조정해야함(ex. 애니메이션)
  • onStop() 사용해서 CPU 많이 소모하는 종료 작업 실행해야함 (ex. DB에 정보 저장)
  • Activity 객체 메모리 안에, view 객체의 현재 상태도 기록
  • 다시 시작되면 onRestart() 호출
  • 종료되면 onDestroy() 호출

6. onDestroy()

  • Activity 소멸되기 전에 호출됨
  • activity 다시 생성되지 않을 경우 onCleared()메소드 호출해서 모든 데이터 정리해야함

참고
https://developer.android.com/guide?hl=ko
https://bbaktaeho-95.tistory.com/60
https://jhshjs.tistory.com/49
https://recipes4dev.tistory.com/67?category=660156
https://m.blog.naver.com/l5547/221845481754

'Android' 카테고리의 다른 글

[Android]Layout  (0) 2022.01.05
[Android]Fragment  (0) 2022.01.05
Comments