Deperecated/Android_강의

안드기본서

누알라리 2020. 3. 1. 15:39
1. Inflation

- XML 레이아웃에 정의된 정보를 메모리 상에서 객체로 만드는 객체화 과정

- 애플리케이션이 시작될 때 이 과정을 거쳐 메모리 상에 만들어진 객체들을 참조하기 위해 ID를 지정함.

 

2. 크기 표현 단위
단위 단위 표현 설명
dp or dpi

밀도 독립적 픽셀

(density independent pixel)

160dpi 화면을 기준으로 한 픽셀

ex) 1인치 당 160개의 점이 있는 디스플레이 화면에서 1dp는 1px와 같음.

1인치 당 320개의 점이 있는 디스플레이  화면에서 1dp는 2px와 같음.

sp or spi

축척 독립적 픽셀

(scale independent pixel)

가변 글꼴을 기준으로 한 픽셀로 dp와 유사하나 글꼴의 설정에 따라 달라짐

 

3. 다양한 레이아웃
Layout 설명
Linear Layout  
Relative Layout  
Frame Layout

View와 동일한 위치에 중복하여 배치할 수 있음

Fragment나 Visibility를 이용한 View Change 등에 주로 사용

Table Layout 격자(Grid) 모양의 배열을 이용하여 화면을 구성
Scroll View  

 

4.  1강 요점정리.
  • View(뷰)는 화면에 그림을 그리는 역할과 사용자의 입력에 대한 처리에 대한 기능을 수행하는 베이스 객체 이다.
  • 모든 위젯이나 레이아웃은 뷰에서 상속받아서 구현되었다.
  • 뷰 중에서 일반적인 컨트롤 역할을 하고 있는 것을 Widget(위젯)이라고 한다.
  • 레이아웃(Layout)은 내부에 뷰들을 포함하고 있으면서 일정한 룰에 의해 배치하는 뷰 그룹을 말한다.
  • 다중해상도 지원을 위해서 단위 형식은 반드시 dp, sp만 사용하는것이 좋다.
  • Linear Layout의 weightSum 속성과 layout weight 속성을 이용하면 다양한 해상도를 가진 안드로이드 단말기에서 일정한 형태의 레이아웃을 가진 앱을 만들 수 있다.
5. 2강 요점정리.
  • Relative Layout은 부모 컨테이너나 다른 위젯들과의 상대적인 위치를 이용해서 배치하는 레이아웃이며, 이를 위해서 부모 컨테이너와 상대적 위치를 이용하는 속성이나 다른 뷰와의 상대적 위치를 이용하는 속성을 제공한다.
  • Table Layout은 행과 열로 이루어진 격자 모양으로 위젯을 배치하는 레이아웃이며, 각 칼럼은 위젯의 크기에 따라 늘거나 줄어들 수 있으며, 칼럼의 수는 들어가는 위젯의 수에 맞춰 자동으로 결정된다.
  • 일반적인 레이아웃이나 위젯들은 내부적으로 스크롤이 불가능하기 때문에, Scroll View를 이용해야서만 화면의 크기보다 큰 컨텐츠를 스크롤하면서 볼 수 있게 할 수 있다. 스크롤 뷰는 내부에 오직 1개의 Child View만 가질 수 있으며, 수평 방향 스크롤을 하고자 할 때에는 HorizontalScrollView를 사용해야 한다.
  • Frame Layout은 Child View를 겹쳐서 보여주는 레이아웃으로, Tab의 컨테이너로 사용하거나 Fragment 배치를 위해 사용하기도 한다
6. 3강 요점정리.
  • 체크박스는 특정 항목의 선택 여부를 입력 받는 위젯이고, 라디오 버튼은 여러 항목 중에 하나를 선택할 수 있도록 해주는 위젯이다.
  • 토글버튼은 온/오프일 때 다른 이미지와 텍스트를 보여주는 위젯이고, ㅅ,위치는 스위치 버튼을 이동시켜 온/오프 상태를 선택하게 해주는 위젯이다.
7. EditText관련 사항

7-1) 입력된 값이 변경되면 알아내기

addTextChangedListener로 TextWatcher를 등록

7-2) 키패드 관련 기능 사용하기

InputMethodManager 객체를 획득하여 hideSoftInputFromWindow() 메소드를 호출

 

8. Java 날짜 관련 용어
용어 설명
timestamp 1970.1.1을 기준으로 지금까지 얼마나 시간이 흘렀는지를 나타내는 시간(millisecond)
TimeZone 시간기준선와 얼마나 시간이 차이나는지를 나타내는 값
Locale

사용자의 언어와 국가로 TimeZone 설정에 사용

(예: 한글(ko), 한국(KR)

Date JAVA에서 날짜를 나타내는 class
Calendar JAVA에서 날짜를 이용한 연산을 할 때 사용하는 class
SimpleDateFormat Date를 String으로 변경하거나 String을 Date로 변경할 때 사용하는 Class
System.currentTimeMillis() 현재의 timestamp를 얻어옴

 

9. 4강 요점정리
  • 데이트피커(DatePicker), 타임피커(TimePicker)는 날짜와 시간을 선택하거나, 선택된 날짜와 시간을 표시하기 위한 위젯이다.
  • Chronometer(크로노미터)는 시간을 카운트하기 위해 사용하는 위젯이다.
  • 복합위젯(Compound Widget)은 안드로이드 플랫폼에서 제공되는 기본 위젯을 이용하여 복합적인 기능을 갖도록 만든 위젯이다. 복합 위젯을 사용하는 이유는 동일한 모양과 기능을 가진 화면이 앱에서 반복적으로 사용될 때 중복 코딩을 방지하기 위해서, 또는 하나의 데이터 객체를 다루는 화면이 필요한 경우를 위해서이다.

 

10. ListView 개발 순서
  1. 아이템을 위한 XML 레이아웃 정하기
  2. 아이템을 위한 뷰 정의하기
  3. 어댑터 정의하기
  4. 리스트뷰 정의하기
11. ListView 관련 함수들
함수 설명
smoothScrollToPosition() 제일 마지막에 추가된 항목을 찾아서 스크롤을 옮긴다.
setChoiceMode() 선택모드로 전환할 수 있다.
getCheckedItemPosition() 선택된 항목의 순서를 얻을 수 있다.
   

 

12. 액티비티를 위한 플래그

 

메인 액티비티에서 메뉴 액티비티를 실행하는 경우 액티비티에서 시스템을 통해 다른 액티비티를 실행하는 형태가 됩니다.

그런데 화면이 없는 서비스라는 것에서 액티비티를 실행하는 경우도 있습니다.

이 때는 액티비티를 새로 만들어 실행할 수도 있지만 이미 사용자가 보고 있는 액티비티 위에 액티비티를 실행하게 되는 경우가 생길 수도 있습니다.

결국 동일한 액티비티인데 두 개가 만들어지게 되고 가장 위에 있는 것만 보이는 상황이 만들어지는 거죠.

이 때 맨 위에 있는 액티비티를 finish 메소드로 없애더라도 사용자에게는 동일한 모양의 화면이 다시 보이게 되는 문제가 발생합니다.

이런 경우에 플래그를 사용하면 동일한 액티비티인 경우 이미 화면에 보이는 액티비티를 그대로 사용할 수 있도록 해 줍니다.

대표적으로 사용되는 플래그 중의 하나가 FLAG_ACTIVITY_SINGLE_TOP 인데 다음과 같이 플래그를 사용할 때와 사용하지 않을 때를 비교해볼 수 있습니다

 

새로 실행하려는 액티비티와 화면에 보이는 액티비티가 동일한 액티비티인 경우 메모리에 새로 만들지 않고 화면에 보이는 액티비티를 그대로 보여줍니다.

그런데 이미 만들어져서 화면에 보이고 있는 액티비티를 그대로 사용므로 onCreate 메소드가 호출되지 않습니다.

onCreate 메소드는 액티비티가 메모리에 처음 만들어질 때 자동으로 호출되는데 화면이 이미 만들어져 있으니 호출되지 않는 거죠.

이때는 onNewIntent 라는 메소드가 호출됩니다.

이 메소드가 별도로 호출되는 이유는 인텐트를 전달받기 위해서입니다.

onCreate가 호출되는 경우에는 그 안에서 getIntent 메소드를 이용해 전달받은 인텐트 객체를 확인할 수 있지만 onCreate 메소드가 호출되지 않는 경우에는 onNewIntent 메소드 안에서 인텐트 객체를 확인할 수 있도록 합니다.

 

출처: https://www.edwith.org/boostcourse-android/lecture/17065/

 

[LECTURE] 1) 인텐트 : edwith

들어가기 전에 화면을 실행할 때 인텐트가 사용된다는 것을 알게 되었습니다. 시스템에서 이해할 수 있는 객체로 만든 것이 인텐트인데, 이 인텐트 안에는 여러 가지 정보가 들어갈 수 ... - 부스트코스

www.edwith.org

 

13. 플래그

플래그는 인텐트에 추가할 수 있는 옵션이라고 이해하면 쉽습니다.

다시 말해, 시스템이 인텐트를 해석한 후 무언가를 동작시킬 때 옵션에 따라 다른 동작을 하도록 만들 수 있습니다.

플래그는 인텐트 객체의 addFlags 메소드를 이용해 설정할 수 있으며 여러 개의 플래그를 | 기호로 붙여 한꺼번에 설정할 수도 있습니다.

가장 많이 사용되는 플래그는 다음과 같은 세 개의 플래그입니다.

Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP.

예를 들어, SMS 문자를 수신했을 때 그 내용을 받아 처리하는 것이 브로드캐스트 수신자(BroadcastReceiver)입니다.

이 브로드캐스트 수신자(BroadcastReceiver)에서 액티비티를 띄우고 그 안에서 수신한 문자를 보여주려 한다면 문자가 도착할 때마다 액티비티가 뜨게 될 겁니다

따라서 화면에 뜬 액티비티를 바로바로 없애주지 않으면 여러 개의 액티비티가 층층이 쌓이는 문제가 발생할 수 있는데 이것을 Intent.FLAG_ACTIVITY_SINGLE_TOP 으로 해결할 수 있습니다.

 

1. Intent.FLAG_ACTIVITY_SINGLE_TOP

동일한 액티비티가 이미 메모리에 만들어져 있다면 추가로 만들지 않고 그 액티비티를 화면에 띄워주는 역할을 합니다.

 

2. Intent.FLAG_ACTIVITY_NEW_TASK

- 액티비티들을 관리하는 태스크(TASK) 객체를 새로 만들도록 합니다.

- 나중에 살펴볼 브로드캐스트 수신자(BroadcastReceiver)나 서비스(Service)는 화면이 없기 때문에 새로운 화면을 띄워주려면 먼저 태스크(Task) 객체가 만들어져야 합니다. 따라서 이 플래그를 추가해주어야 합니다.

 

3. Intent.FLAG_ACTIVITY_CLEAR_TOP

- 원하는 액티비티가 이미 메모리에 만들어져 있고 그 이후에 다른 액티비티가 만들어진 경우 원하는 액티비티를 찾아 다시 띄울 때 그 이후에 만들어진 다른 액티비티들은 없애주는 역할을 합니다.

- 이런 플래그들을 이해하려면 액티비티 스택(Activity Stack)에서 액티비티가 관리된다는 점을 이해해야 합니다.

 

출처: https://www.edwith.org/boostcourse-android/lecture/17066/

 

14. SharedPreferences

데이터의 복구

수명주기 메소드가 자동 호출되도록 만든 이유는 사용자가 입력했던 데이터를 복구하거나 상태 정보를 복구할 수 있도록 만들기 위해서입니다.

따라서 화면이 없어질 때 데이터를 임시로 저장해두었다가 화면이 다시 보일 때 복구할 수 있어야 하는데 이때 사용되는 메소드가 onPause와 onResume입니다.

onPause 메소드는 화면이 눈에서 보이지 않게 될 때 항상 호출되므로 이때 데이터를 저장해둘 수 있습니다.

데이터는 SharedPreferences를 이용하면 간단하게 저장할 수 있습니다.

 

 이 방법 이외에도 onSaveInstanceState 메소드와 onRestoreInstanceState 메소드를 사용하는 방법도 있습니다.

액티비티가 중지되기 전에 onSaveInstanceState 메소드가 호출되는데 이 안에서 임시로 데이터를 저장할 수 있습니다.

저장할 때는 번들 객체를 만들어 저장하는데, 이 번들 객체는 액티비티가 다시 만들어질 때 호출되는 onCreate나 화면에 다시 보일 때 호출되는 onRestoreInstanceState 메소드의 파라미터로 전달됩니다.

따라서 파라미터로 전달된 번들 객체의 데이터를 이용하면 화면에 원래의 데이터를 복구할 수 있습니다.

 

 

 

 

투 비 컨티뉴...