Intent - Activity 전환

채현·2023년 2월 23일
0

안드로이드

목록 보기
12/37

📲 Activity 전환

⭐ Android Application 의 4대 구성요소[Component] ⭐

AndroidManifest.xml의 <application> 태그안에 반드시 등록해야만 사용할 수 있는 주요 클래스들

  1. Activity - 화면 담당 클래스

  2. BroadcastReceiver - 디바이스의 특정 상태 [문자수신, 배터리부족, 부팅완료, gps 상태정보 등등..]를 OS 에서 방송해주면 이를 수신할 때 사용

  3. Service - 백그라운드 (화면에서 안보이지만 앱은 실행 중)에서 코드를 동작하게 하고 싶을 때 사용. [ex. 뮤직플레이어 앱]

  4. Contents Provider - 기본적으로는 sandboxing (다른 앱의 메모리 저장위치를 알더라도 DB접근 불가), 다른앱에게 나의 DB 정보를 제공할 때 사용 [ex. 사진앱 or 연락처앱 ] --> 가져다 쓸 경우 - Contents Resolver

Activity는 4대 구성요소, Activity 하나를 더 만들었다면 AndroidManifest.xml에 새 Activity 정보를 작성해주어야함

스마트폰 하나에 하나의 화면만 보여주자 --> 화면단위로 어플리케이션이라고 판단함 (외부에서 아무 화면에서나 시작할 수 있도록 - main 함수 없음) android:exported="false" : 외부에서 이 화면을 직접 실행불가

<activity android:name=".SacondActivity"
          android:exported="false"></activity>

Activity간에 서로 다른 앱으로 인식 (별도의 시스템, 샌드박싱)
정보교환이 어려움 서로 다른 메인스레드가 있음, 단순하게 new, 참조 불가!
중간 전달자 객체 Intent 필요 (MainActivity startActivity() -> 운영체제(의도를 해석) 거쳐서 -> SecondActivity)

화면이 전환되면 기존 화면은 BackStack에 보관 : 뒤로가기 할 경우 이전화면으로 돌아감
finish(); 으로 끝내면 뒤로가기시 종료됨

💾 자료구조(데이터저장구조)

  • Stack (FirstInputLastOutput)
  • Queue (First_I_nputFirstOutput) ex. 메시지(엔터)

📦 Intent

액티비티간의 데이터전달은 Intent만 가능함

Extra : data를 옮길때
startActivity : 편도
startActivityForResult : 왕복 --> 어디를 다녀온 intent인지 물어봐야함 + 유사한 동작을 통일하기위함 --> ActivityResulytLauncher 이용

📍 묵시적 Intent

회사마다 사진앱 연락처앱의 클래스 이름을 다르게 지을 것이고 알 수가 없음
클래스 이름을 몰라도 특별한 식별 글씨 : Action 값으로 찾을 수 있음

🚨 api 30버전 이상부터는 묵시적 Intent로 실행하는 액티비티는 exported가 true여야함

다른 앱을 부르기위해서는 무조건 묵시적 Intent 사용해야함!

findViewById(R.id.btn_dial).setOnClickListener(view -> {
            //다이얼화면(전화앱) 실행
            Intent intent = new Intent();
            intent.setAction(Intent.ACTION_DIAL);

            //미리 전화번호까지 전달하려면
            intent.setData(Uri.parse("tel:0101235678"));

            startActivity(intent);
});

0개의 댓글