[Android] Android Basics
Updated:
안드로이드 프레임워크(Android Framework)
중요한 components
- (1)activity -> 화면 페이지(sth that will be displayed on)
- (2)service, (3)broadcast receiver -> 백그라운드 작업
- (4)content provider -> 데이터를 공유하는 방법(to share data btw apps. 데이터를 제공해주는 쪽에서 구현)
cf. JNI(java native interface)
cf. XML의 역할
- 공공데이터 표현
- 컨테이너에게 description
- 안드로이드에서는 XML에 UI를 설계.
- java코드가 아닌 자원 코드를 src 폴더에 따로 저장.
- 자원을 자동으로 컴파일해서 자바에서 사용할 수 있는 객체 형태로 바꿔줌. 이렇게 변환해서 등록해놓는 코드가 R.java)
- .xml 파일명엔 대문자가 포함되면 x / 숫자로 시작하면 x
cf. 생명주기(life cycle) 메서드를 잘 알아야 해 -> 프레임워크 구조의 패턴에 맞게 코드를 작성하기 위함.
cf. intent: 컴포넌트 활성화시키는 객체
- use: 다른 액티비티를 깨워서 새 페이지를 활성화
- broadcast receiver와 관련이 있다. broadcast receiver 동작 예> 문자메시지(알람이 울리다가도 메시지를 수신함.)
cf. manifest file: 권한 설정, 추가. 프로그램에 대한 명세서.
Component Lifecycles
1. Activity lifecycle
- active
- pause: 객체는 소멸되었지만 상태 정보는 유지.
- stop
(i) 액티비티 생명주기 메서드
- onCreate() // 액티비티 초기화 코드. 뷰 생성.
- cf. Bundle: key와 value 저장. 안드로이드 개발에서 자주 쓰이는 일종의 Map.
- setContentView(): XML로 만든 View 객체를 현재 Activity에 붙여준다.
(ii) activity_main.xml
- Attribute id: Attribute을 부를 이름. 속성들은 R 클래스(R.java)에 저장된다. 따라서 .java 파일에서 접근하려면 R.id.정의한id라고 쓴다.
UI
- 1. 이벤트 리스너(event listener)
-
이벤트의 발생을 기다리다가 이벤트가 발생하면 핸들러를 호출. 항상 귀를 기울이고 있다 해서 listener. 핸들러에 대한 추상 클래스가 있음. 여기에 이벤트 발생에 대한 동작을 구현.
-> setOnTtemClickListener()에 붙여줌. 여기에 붙여야, listView에 대해 동작하게 됨.
2. 메뉴
- 상단의 : 누르면 나타나는 메뉴 - options 메뉴
- view를 길게 누르면 나타나는 메뉴 - context 메뉴
Adapter
getView(position, convertView, parent): Adapter에서 가장 중요한 메서드 (–이하 parameter 설명–)
- position: 처리할 데이터의 위치. 해당 위치의 데이터를 읽어 리소스로 지정한 뷰로 생성하여 반환
Intent
- Activity를 이동한다는 것은, 다른 Activity를 활성화시키는 것! —> Intent
- 안드로이드는 현재 프로그램 외에도 다른 프로그램을 불러올 수 있음
- 다른 프로그램은 분리된 프로세스에 있으므로, 메모리 자원을 공유하지 않음
- 직접적이지 않은 다른 방식으로 지목을 해서 깨워야 함
=> 묵시적인(implicit) 방법 - 조건 사용: intent filter, 상수 코드 사용 (명시적인 방법 - intent. 이동할 Activity 클래스 명시)
EX. AndroidManifest.xml 안에서 활성화할 액티비티에 intent-filter 태그 사용
<intent-filter> <action></action> <data></data> <category></category> </intent-filter>
cf. URI: 자원의 위치
- getIntent(): Activity 클래스에서 제공하는, intent를 받아오는 메서드. 현재 Activity를 활성화하려고 던진 intent를 받아옴.
- finish(): 현재 Activity를 종료하는 메서드 -> 이전 Activity로 되돌아감.
- putExtra(): 종료하면서 Activity 정보를 담아서 보내줌
- setResult(): 처리 결과가 정상/비정상인지 보내줌
- Intent intent = new Intent(packageContext, target 액티비티명): 타깃 액티비티를 명시
- startActivity(intent): target으로 지정한 intent로 이동
- startActivityForResult(intent, requestCode)
- requestCode: 어느 액티비티 다녀왔는지 표시
- onActivityResult(requestCode, resultCode, data)
- startActivityForResult()로 다른 액티비티 다녀오면 자동 호출됨. 다녀온 액티비티 처리 결과를 현재 액티비티에 적용
- requestCode: 어느 액티비티 다녀왔는지 확인
- resultCode: 다녀온 액티비티의 처리 결과가 정상인지 아닌지 학인
- data: 다녀온 액티비티 쪽에서 처리 결과를 담아 보낸 intent
cf. 왜 어떨 땐 this 쓰고 어떤 땐 액티비티명.this 쓰지?
- 이벤트 핸들링을 하는 경우엔 context의 혼동이 있을 수도 있어, 액티비티명.this라고 쓴다.
- 반면, 단순히 액티비티를 이동하는 경우에는 프로그램이 context를 헷갈려하지 않기 때문에 그냥 this라고 써도 무방하다.
Leave a comment