1. 화면 이벤트 핸들러(화면 이벤트 처리)
- 어떤 행위에 대한 요청을 처리(handle)할 때, 이벤트 핸들러를 사용함.
● 버튼을 누르는 행위가 발생하는 장소 : 이벤트 소스
● 버튼을 누르는 행위 : 이벤트
● 이벤트를 처리하는 클래스 : 핸들러(핸들러 객체)
● 이벤트가 발생하면 이벤트에 대한 요청(ex:텍스트뷰에 보여주기 등)을 처리(구현)하는 메서드 : 핸들러 메서드
- 자주 사용하는 이벤트 처리 방법 : 익명 내부 클래스(Anonymous Nested Class)
cf)익명 내부 클래스(또는 내부 클래스) 형식을 쓰레드와 핸들러(쓰레드 관련) 등에서도 많이 사용함.
<= 클래스를 따로 선언하지 않고, 내부(inner) 클래스를 사용하거나, 메서드의 인자에 이름이 없이 사용하는 익명(anonymous) 클래스를 사용.
2. 어댑터
- 안드로이드뷰 어댑터(중간에서 접속 소켓 역할) :
화면과 데이터를 연결해 원하는 모습으로 표시되게 만드는 어댑터
예) 리스트뷰가 어댑터와 상호작용하여, 데이터를 리스트 화면에 표기하는 과정
1.어댑터를 상속한 어댑터 클래스를 정의
2. 리스트뷰 생성
3. 자료 목록(데이터)을 준비하고 어댑터 생성
4. 리스트뷰에 어댑터를 연결
5. 리스트 어댑터의 자료 목록을 가져오는 함수(메서드)를 호출
6. 이 함수로 인해 가져온 자료를 화면 레이아웃에 데이터를 넣음
7. 자료 목록의 모든 자료를 원하는 형식으로 리스트뷰에 표시함.
3. 익명 내부 클래스 사용 예
- 안드로이드는 행위에 대한 영향 범위를 한정하고, 코드를 간결하게 사용하기 위해
이벤트 핸들러, 핸들러, 쓰레드에 익명 내부 클래스 형식을 많이 사용함.
안드로이드 프로그래밍은 형식이 거의 고정되어 있으므로, 아래 예시들이 공식처럼 사용됨.
예)
○ 리스트뷰, 그리드뷰의 이벤트 처리 : 해당하는 뷰에 리스너 생성
listView.setOnItemClickListnerer(new AdapterView.OnItemClickListener(){~}
○ 이벤트 메서드 내에 Dialog 사용 : 버튼을 눌렀을 대 날짜 선택 dialog를 나타나게 함. 이후 선택한 날짜에 대한 처리를
진행
public void onClick(View v){
DatePickerDialog dialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener(){
~
}
}
○ 핸들러(요청 핸들러, 쓰레드 관련 핸들러) :
※'이벤트 핸들러'와 구벌하자
두 가지 사용법
- Handler h = new Handler(){
@override
public void handleMessage(Message msg){
}
};
- new Handler().postDelayed(new Runnable(){
@override
public void run(){
~}
}, 300);
○ UI 쓰레드 : 안드로이드 프로그래밍에서 인터넷 작업, 다량의 데이터 처리, 다수의 작업을 할 때는 쓰레드를 사용하는데,
이 쓰레드는 화면에 직접 접근할 수 없으므로 화면 UI 쓰레드를 사용.
- runOnUiThread( new Runnable(){
@override
public void run(){
}
}
new Thread(new Runnable(){
@override
public void run(){
~
}
}).start();
4. Handler(요청 핸들러) : 안드로이드는 여러 쓰레드를 만들어서 작업함. 단, 서브 쓰레드는 메인 쓰레드의 화면 관련 작업을
할 수 없음. 그래서 UI 쓰레드나 핸들러를 이용함.
핸들러를 만들려먼 Handler를 상속받고, 요청을 처리하는 handleMessage() 메서드를 구현하면 됨.
그 다음 개발자가 핸들러의 sendMessage()를 호출하면 handleMessage()가 자동으로 호출됨.
-요청 메서드 sendMessage()는 처리 메서드 handleMessage()를 호출함. 이때 Message에 정보를
저장해서 handleMessage()에 넘길 수 있음.
5. JSON(JavaScript Object Notation)
- 텍스트를 이용하여 객체를 표현하는 방법
- 서버에서 제공된 텍스트를 자바스크립트에서 객체로 처리하는 방법으로, 이해하기 쉽고 사용하기 편리해서 웹 서비스 등에 많이 사용.
- 특징
1. JSON객체는 {}에 키와 값을 한쌍으로 저장. {"key" : "value"}
2. JSON배열의 []는 자바의 배열이나 ArrayList처럼 여러 개의 데이터를 저장
3. 다른 한 쌍의 키와 값은 ","로 구분
6. XML(eXtensible Markup Language) : 태그(<> </>)를 이용하여 텍스트를 계층적인 트리 구조로 만드는 방법.
<key>vlaue</key>
엘리먼트는 대소문자를 구별 및, 특수문자를 사용하지 않음.
7. 파싱 : 주어진 데이터를 가공해서 원하는 형식의 정보를 만드는 과정 '파싱(Parsing)'이라고 함.
- 문자열 파싱 : 문자열을 찾고 잘라서 원하는 문자열을 만드는 파싱, 초급 파싱.
- JSON, XML 파싱 : 규칙적인 구조를 갖음. 중고급 파싱.
8. AsynTask(비동기 작업) : 데이터가 매우 많거나 웹의 자료를 사용할 때는 비동기 작업을 권장.
비동기로 데이터를 요청하면 요청이 끝났다는 통보를 받을 때까지 다른 작업 가능.
비동기는 쓰레드+핸들러와 같은 역할을 하며, 사용하기도 편리.
비동기를 만들려면 AsynTask를 상속하고 doInBackground() 메서드를 구현하면 됨.
필요한 경우에는 doInBackground() 앞(pre) 뒤(post)로 자동으로 실행되는 onPreExecute()와
onPostExecute() 메서드를 재정의하면 됨.
9. 컨텍스트 : 환경과 관련된 정보를 제공하는 컨텍스트
컨텍스트는 안드로이드 어플리케이션의 환경과 관련된 리소스, 클래스, Intent, Activity 등에 대한 정보를 제공하고,
개발자가 사용하는 API와 안드로이드 시스템 사이에서 정보를 관찰함.
예) 모든 액티비티는 컨텍스트를 이용하여 환경에 관한 모든 정보를 얻을 수 있음.
10. 안드로이드 퍼미션 : 안드로이드에서 시스템 레벨의 디바이스 관련, 개인의 메일, 메시지, 전화번호, 외부의 인터넷 사용
등을 사용할 때는 퍼미션(허가)이 필요함.
예)AndroidMenifest.xml <= <uses-permission android:name="android.permission.INTERNET" />
11. 인텐트(Intent) : 액티비티 사이에서 진행 방향을 알려주는 메신저,
하나의 액티비티에서 다른 액티비티로 이동할 때는 인텐트를 사용
12. 결과를 갖고 되돌아오는 액티비티 : 안드로이드에서는 하나의 액티비티 결과값을 갖고 되돌아오는 방법을 많이 사용함.
From(Activity) | To(Activity) |
startActivityForResult() | |
setResult() | |
onActivityResult() |
13. 멀티 액티비티 : 안드로이드는 일반 자바 어플리케이션과 달리 한 번에 많은 화면을 보여줄 수 없음.
그래서 액티비티 별로 화면을 나눠서 개발하기 때문에 여러 개의 액티비티를 사용.
보통 메인 액티비티에서 다른 액티비티로 이동했다가 작업을 하고 다시 돌아오는 방법을 많이 사용.
액티비티에 식별값을 사용.
14. 액티비티, 서비스 사이의 이동 : 액티비티 사이의 이동은 인텐트를 사용함.
액티비티 뿐만 아니라 서비스, 브로드 캐스트리시버, 웹, 전화, QR 등
4대 컴포넌트(액티비티, 서비스, 브로드캐스트리시버, 컨텐트프로바이더)
와 웹(네트워크), 전화, QR과 같은 디바이스를 사용하는 컴포넌트 사이의 이동도 모두 인텐트를 사 용
※4대 컴포넌트 사이의 이동은 반드시 인텐트를 사용해야 하고, AndroidManifest.xml에 꼭 등록 해 주어야 함.
댓글
댓글 쓰기