레이블이 공부 - Android 이론인 게시물을 표시합니다. 모든 게시물 표시
레이블이 공부 - Android 이론인 게시물을 표시합니다. 모든 게시물 표시

2016년 8월 4일 목요일

Android 이론 - Intent로 값을 넘길 때 'call by reference'를 실현 하려면??


기본적으로 Intent의 getExtra / putExtr 를 활용하게 되면 call by value 로 적용된다.

Service와 Activity / 프로세스와 프로세스 끼리 객체를 공유하기 위해선 어떻게 할까?

바로 Parcelable 인터페이스를 활용하면 된다.

공유하고자 하는 객체의 클래스 선언 시 Parcelable을 implement 해서 사용하면
Intent의 getParcelable / putParcelable을 사용할 수가 있고 이를 통해서 객체 공유가 가능해진다.

Android 이론 - 안드로이드 문자열 타입


기본적인 자바의 문자열 타입은 두말할 나위 없이 String이다.
그런데 안드로이드에서는 String의 상위 타입으로 Charsequence 타입을 두었다.

그 이유는 무엇일까

CharSequence 밑에 String과 같은 티어로 Spannable 클래스를 만들어 제공하기 위해서

그럼 Spannable은 String과 무엇이 다르기때문에??

1. String은 오로지 Data만 담고 있다.
2. Spannable은 Data + Design 까지 담을 수가 있다.


Hello World 라는 표현을 하고자할 때 기존 String을 이용하려면 View에서 복잡하게 스타일을 적용해 주어야 한다.

Spannable 에서는 setSpan 함수를 이용해 자유자재로 스타일을 적용해 줄 수가 있다.
게다가 <b></b> <br/> 등의 html 태그 까지 알아서 적용해주는 기능까지 제공한다. (그렇다고 css style까지 해준다는건 아님)

Android 이론 - Permission 정리 (계속)


Permission 관련 태그 정리

1. <uses-permission>
2. <permission>



<permission>
android:name="AAA"로 정의 가능하고 AAA라는 이름은 유일성이 보장되어야 함
사용자 정의 permission 정도 됨
android:protectionLevel로 접근레벨 설정이 가능하고 주로 'normal/dangerous/signature'
signature 는 <uses-permission> 선언만으로 사용이 불가능하고, 제공 벤더와의 key 값이 일치해야 사용이 가능


2016년 8월 2일 화요일

Android 이론 - Service 사용 시 고려사항


서비스는 항상 Background 에서 동작

Background에서 지속적으로 NW 통신을 하게 된다는건 불합리

날씨를 가져다가 갱신하는 앱 위젯인데

화면이 Off 된 상태에서는 필요 없는 통신이므로

screen on receiver 에 반응해서 통신을 시작 하도록 설계하는것이 중요

동적으로 manifest에 등록 하거나 등록 해제 하도록 설계해야 함

Android 이론 - Time out 문제 (5초, 10초 룰)


안드로이드에는 2가지 TIMEOUT 제약이 있다.

5초룰과 10초룰

5초룰로 더 유명한 에러는 ANR이라고 일컬어 지는 에러이다.
ANR 이란 Activity Not Response 의 약자 이다.

사전적 의미는 Activity 응답 없음

개발 하면서 고려 해야 할 것은 화면 event 발생으부터 logic 처리 완료까지 5초 안에 끝내야 한다는 것이다.
대부분의 네트워킹 관련 로직이 있으면 내포하고 있는 문제이다.
안드로이드 개발자라면 반드시 고려하고 구현해야 하는 부분이다.

[솔루션]
1. Thread로 처리 하면 문제 없음
 -> android 개발자라면 NW 처리 이벤트는 무조건 Thread 처리

BUT, Thread로 처리하면 생기는 문제

사용자 정의 Thread 는 UI Thread 에서 생성할텐데
문제는 개발자 정의 Thread 가 View 객체에 접근이 불가하다는 것이다.(Run time error)
View 객체는 UI Thread 에서만 제어 가능하다.
 -> Handler 로 해결 가능, Thread 에서 Handler 를 이용하면 의뢰 형식으로 간접제어 가능

2. IntentService

IntentService 는 서비스와 거의 동일하지만,
해당 작업이 완료 되면 알아서 종료 (Service 는 스스로 종료 불가)
완료된 작업은 ResultReceiver 이용


p.s.
10초룰
 : Broadcast receiver 가 logic 처리 완료까지의 시간 10초


2016년 8월 1일 월요일

Android 이론 - 안드로이드 Library 종류 (계속 업데이트...)



[Android 표준 라이브러리]

android.jar


[Support 라이브러리]

 - 구글(이라는 써드파티 벤더)의 Library
 - 하위 호환성을 위해서 제공
  : 2.2 / 2.3 / 3.0 ,,,,, 등의 다양한 버전의 안드로이드 호환을 위한 라이브러리
  : toolbar 의 경우 5.0 에서 등장했는데 하위 버전에서는 에러가 나기 때문에 이를 방지하기 위해 제공

 - v4 : 추가설정 없이 사용 가능(Graddle 에다가 dependency 추가 없이도 사용 가능)
 - v7, v13,,,,, : Dependency 연결해서 사용해야 함


[Google Play 서비스 라이브러리]

구글의 서비스 컨텐츠를 제공하는 Application이 안드로이드 폰에 기본적으로 설치 되어 있다.
이 서비스를 이용하기 위해선 com.google.android.gms:play-services를 Graddle에 추가 해야 한다.
대표적으로 Fused Location 서비스를 이용하는 것이 그렇다.

그런데 간혹가다가
'Google Play services out of date.  Requires 9256000 but found 8703440'
이런 에러코드를 만나게 되면서 기능이 제대로 동작하지 않는 경우가 있다.

이럴때는 구글 플레이에서 'Google Play 서비스' 앱을 업데이트 하면 해결된다.