AndroidManifest.xml의 <application>
태그안에 반드시 등록해야만 사용할 수 있는 주요 클래스들
Activity - 화면 담당 클래스
BroadcastReceiver - 디바이스의 특정 상태 [문자수신, 배터리부족, 부팅완료, gps 상태정보 등등..]를 OS 에서 방송해주면 이를 수신할 때 사용
Service - 백그라운드 (화면에서 안보이지만 앱은 실행 중)에서 코드를 동작하게 하고 싶을 때 사용. [ex. 뮤직플레이어 앱]
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();
으로 끝내면 뒤로가기시 종료됨
액티비티간의 데이터전달은 Intent만 가능함
Extra
: data를 옮길때
startActivity
: 편도
startActivityForResult
: 왕복 --> 어디를 다녀온 intent인지 물어봐야함 + 유사한 동작을 통일하기위함 --> ActivityResulytLauncher
이용
회사마다 사진앱 연락처앱의 클래스 이름을 다르게 지을 것이고 알 수가 없음
클래스 이름을 몰라도 특별한 식별 글씨 : 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);
});