구글 I/O Extended Seoul에서 발표한 Android N



구글 IO때 예상된 일정에는 차질 없다. 빠른 시일내에 N테스트를 해야한다.


스크린 줌 설정

런타임시 화면 밀도가 바뀔 수 있으니 테스트해봐야 한다. Bitmap을 캐쉬해두는 경우 문제가 될수 있다. 고사양 기기가 sw320dp를 가질 수도 있으니 염두해둔다.


멀티스크린

가로/세로 모드를 반드시 구현해라.
멀티스크린 모드로 인해 화면이 작아 질수 있으니 최소 220dp(w/h)가 지원되도록 개발해야한다.
사용자가 화면크기를 늘리거나 줄일떄 기본으로 Activity가 재 생성되며, 필요에 따라 onConfigurationCahaged() 이벤트로 처리 할 수 있다.
attr#resizedableActivity값은 기본적으로 TRUE이며 필요에 따라 속성을 변경 하면된다. 단, Root Activity의 FLAG의 속성에 따라 작동 유무가 판단된다.

targetSdk 24를 쓰면서 멀티스트린 지원하지 않게 하는 팁!
* targetSdk = 24
* resizedableActivity = false
* launchMode = singleInstance | singleTask

앱간의 Drag and Drop API도 있으니 필요시에 사용가능하다.


배터리 최적화 모드(Doze)

Doze on the Go (light Doze모드) 새기능 추가
움직임이 있더라도 사용자가 폰을 일정시간 사용하지 않으면 doze모드 진입
네트워크 작업 중단, 잡스케줄러 지연
이미 Doze모드에 최적화된 앱은 별도로 신경 쓸 필요는 없다.

테스트

#adb shell dumpsys deviceidle step light

Doze모드 whitelist에 추가 하는 API도 있는데 잘못 하용하면 앱이 내려갈 수 있다.

참고: 안드로이드 앱 배터리 최적화 무시방법


메모리 최적화 모드

Broadcast 이벤트를 처리시 많은 앱에서 동시에 처리 하는경우 문제가 된다. 동시에 수많은 앱에서 이벤트를 처리 하기때문에 성능적으로 문제가 되며, 특히 사용하고 있지 않는 앱도 이벤트를 받는등 불필요한 작업이 있을 수 있다.

런타임시에 등록한 경우는 작동되나 안드로이드 메니페스트에서 선언한 Broadcast의 경우 작동하지 않는다.
CONNECTIVITY_CHANGE, NEW_PICTURE, NEW_VIDEO는 메니페스트에서 선언한 Broadcast의 경우 N부터 작동하지 않는다.

테스트

#adb shell cmd appops set <package-name> RUN_IN_BACKGROUND igenore



Daum DevDay 15th 후기

Daum Devday에 다녀온지 벌써 일주일이 지났네요. 후기를 적어야지적어야지 생각만 하다가, 간단히 적어봅니다. 이번 15회 다음 DevDay는 10개의 팀을 선정하여 제주도에서 1박 2일로 앱개발을 하였습니다. 다음에서 음성인식 API의 새로운 버전을 활용하여 개발을 목적으로 하고있고, 5.7:1의 경쟁률에 당당히 선정되었습니다. 총 10개의 팀으로 대학생, 고등학생, 일반인들이 골고루 분배된것 같았습니다. 


다음의 음성인식 API의 새로운 버전은 기존의 검색타입 3가지에서 고립어 검색타입이 추가 되었습니다.

  • 웹검색
  • 연속어
  • 지도
  • 고립어
고립어 타입은 정해진 문자열 배열에서 음성인식을 통해 문자열중 가장비슷한 문자를 반환해줍니다. 예를 들어 “예”, “아니요”로만 대답하는 경우 예, 아니오를 고립어 타입으로 문자열을 넘기게 되면 “예” 또는 “아니오” 로만 음성인식이 되기 때문에 음성인식률이 상당히 높아집니다.

우리팀 프로젝트 소개


우리팀은 음성인식 API를 이용해서 어떠한 화면에서 어떠한 작업을 하고 있던 간단한 작동으로 앱을 실행하는 앱을 개발하는 것이 목표였습니다. 수 많은 앱중 실행하고 싶은 앱을 찾기가 힘든 분들이 가장 빠르고 정확하게 앱을 실행 할 수 있도록 도와주는 것입니다.

어떠한 화면에서 한번의 터치를 통해 음성입력을 받아야 하기때문에 Facebook 메신저의 Chathead방식을 사용해서 원형의 아이콘이 화면에 항상 떠있도록 구현하였습니다. 물론 불 필요 한경우 가장자리로 이동하여 삭제 할 수 있습니다.


그리고 앱의 명칭을 정확하게 말하는 번거로움을 없애기 위해 앱별로 별명을 지정할 수 있는 기능도 추가 했습니다. 앱명이나 별명 둘중 말하면 앱이 실행됩니다. 앱 최초실행시 별명과 매칭할 수 있도록 설치된 모든 앱을 로컬 DB화해서 관리하고, 제거나 설치 되는경우 Receiver을 통해 DB를 업데이트하는 방식으로 설계되어 있습니다.  

저희 팀은 다른팀과는 다르게 당일 개발/기획/디자인을 모두 했습니다. 다른팀들은 이미 서비스되어 있거나 어느정도 완성된 앱에서 음성 API만 추가만 하였지만 저희들은 처음부터 끝까지 개발해야 했기에 잠을 한숨도 못잤습니다. 약 15시간 정도 개발했던것 같습니다.

밤샘을 인정(?) 해주신건지 당당히 2위를 해서 넥서스7을 상품으로 받았습니다.

개발된 앱은 아래 링크를 통해 다운로드 받으실수 있습니다.

 

이제 고등학교 진학을 하는 학생들도 참가해서 많이 놀랐고, 약 20년간 개발하신 분들도 오셔서 한번더 놀랐습니다. 발표할때 빼고 팀간의 소통이 없어 좀 많이 아쉬웠습니다. 개발/디자인/기획을 각각 모집해서 팀을 만들어서 그자리에서 앱개발을 진행 해보는 것도 나쁘지는 않을것 같다는 생각도 들었습니다.

DevDay 참석한 10개 팀 모두 수고많았습니다. 다음에 좋은 인연으로 또 만났으면 좋겠네요 🙂

NHN DEVIEW 2013 모바일 트렉 주요 내용

KEYNOTE

NAVER LABS – 송창현

플랫폼 개발자들이야말로 진정한 개발자이며, 이름없는 영웅들이다. 현재 플랫폼 개발자보다 서비스 개발자들이 많다. 플랫폼 개발자들이 많이 활성화 되기위해 많은지원이 필요로 하고 있고 NAVER에서도 D2와 같은 개발지원센터를 만들어 운영중이다. 이런 플랫폼개발없이 서비스개발만 하게 된다면 내부적인 구조를 모르며 사용하기 때문에 결론적으로 퀄리티높은 서비스가 나오기 힘들다. 

High Performance Android App Development

Kandroid – 양정수

1. The history of Android’s Performance Features

2012년 젤리빈 나오기전

– 안드로이드는 아이폰 성능을 어떻게 따라잡을 수 있을까?

애플 vs 삼성

삼성은 자신들만의 구조를 바꾸고 최적화 해서 애플을 추격했다.(초기 4년) 

2012년 여름 젤리빈 발표 이후

성능을 높였는데 하드웨어와 관련 없는 것이다. 내부적으로 무었을 했는지 알아볼 만하다.

젤리빈의 성능 측정툴을 통해 이전 OS와 비교 하였는데 스크롤을 향상이 되지 않았고, 페이스북에서도 스크롤 포퍼먼스 향상법을 제시 했기때문에 다른 무언가가 있다고 생각해서 직접 측정을 했다.

2. Performance comparison of the Three Programming Model in Android

ListView

주 원인은 이미지 로딩 문제 

LRUCache는 작은 메모리의 기기에서는 문제가 있다. => FileCache 하는 방법이 경험적으로 추천.

– 항상 측정하기 전에 선급한 결론을 내리지 마라. 막연한 상식으로 해결하려 하지마라.

RenderScript(바이트의 중간 코드로 빌드되고 런타임시 디바이스 코드로 변환: 고성능을 유지): 고성능 앱을 위해서라면 필수.

:support v8을 통해 하위 호환성 유지

H/W를 이용해서 앱의 성능을 올려라.(GPU, 멀티코어)

쓰레드를 병렬해라.

3. Case study : Performance Features of Google Chrome Browser in Android

크롬 조직, 안드로이드 조직 두개 통합 => 크롬리더가 조직 관리

크롬과 안드로이드 둘다 생각 해봐야 할떄 

크롬만든이유 

보다안전한, 보다빠른, 보다안정적 =>센드박스 모델(cpp라이브러리 기반)

크롬 앱 분석: 

크롬에서 사용했던 쓰레드 분기 방법을 안드로이드에 적용

매니페스트에서 android:process=”:sandboxed_process:0″ android:isolatedProcess=”true” 자신의 앱에서 별도의 프로세스를 띄운다.

GPU Thread를 따로관리 한다.

VSync(젤리빈의 중요한 기술) 사용: 기존 인터벌로 그림을 그렸는데 프레임이 해당시간에 그려지지 않고 지연되어 끊금으로, 해당시간에 해당프레임을 그리기 위해 VSync로 변경

=>해결은 됐으나 문제가 있어 둘다 통합.

4. Questionnaire : Multi-Core vs. GPU, Android vs. Chrome, Beyond Android

피쳐폰: 기능경쟁

스마트폰: 하드웨어

직접의 한계에 도달(멀티코어가 끝나간다. 별도의 GPU와의 등과 인테그레이션으로 발전가능)

그와관련된 OpenGL등 관련된 기술

안드로이드 VS 크롬

통합 또는 두가지상태로 유지

혹시 통합되면??

1. 안드로이드 중심으로 크롬통합

=>크롬브라우저는 빌드하는 시스템을 가지고 있어야 됨

2. 크롬이 안드로이드를 통합

=>모든 안드로이드앱을 크롬에 실행 가능

안드로이드 앱의 성능테스트, 자동화가 가능할까?

LG전자 – 이경민

측정 할 수 없으면 개선 할 수 없다.

if you can’t measure it, you can’t message it.

소프트웨어 성능테스트는 소프트웨어 개발에 앞서 갖추어야 할 일.

안드로이드 버전별로 성능에 대한 특색이다르다.

안드로이드 앱 포퍼먼스 테스팅 

historical analytics w/kmemtracer

일반적으로 아웃오브메모리 시 heap dump로 분석하지만 이로 인해 문제점을 파악 하기 힘들다.  

앱의 중요한 시점마다 성능지표를 기록하고 히스토리를 분석해서 측정이 필요 하다.

activity의 성능측정은? 

oncreate(), onstart() (x)

instrumentation (o)

kemetracer-libs.jar

callActivityOnCreate() -> OnCreate() 거쳐 실행되는 구조

$> am instrumentation -e class \ 실행될 클래스명

/sdcard/kmemtracer 에 csv저장

고성능 WebView 만들기

SK Planet – 박창현

안드로이드의 웹뷰 문제점

OS 디바이스의 심한 파편화 

평준화 방법:

없는 기능을 새로 만든다.

느린것을 빠르게.

웹뷰 필요 기능:

웹뷰->JS 호출

webView.loadurl(“javascript:…..”);

JS->웹뷰 호출

addjavascriptInterface();

2D Canvas(느리다.)

@Override Canvas.getContext(“2d”)

@Override Cnavas Rendering2DContext()

=>2배 가까이 성능 향상.

Web Sockets(없다.)

onPageFinished()시 Script를 실행 한다.

=>된다.

웹뷰는 mainThread에서 작동 되기 때문에 Thread조심!

쫄지마, 글로벌! 평범한 개발자의 좌충우돌 글로벌 오픈소스 도전하기

카카오 – 심상민

이미만들어진 오픈소스가 있다면 내가 만들면 뭐가 다를까 라는 물음을 던져보자.

문서가 없는 라이브러리는 사용하지 않는다. => 사용자가 개발자인 서비스

라이브러리를 만들기 위해서는 일상에서 힌트를 얻자.

라이브러리도 서비스다.

오픈소스 운영 방법

http://groducubgoss.com

일본 컨퍼런스 – 0.79명의 트윗

한국 컨퍼런스 – 0.03명의 트윗

JsCamp-Asia 참가

영어를 못하지만 도전! 슬라이드도 영어로 번역

싱가포르에서 발표- 다양한 지역에서 들어온다. 

=>영어로 작성한다면 다양한 국가에서 들어오며 지속적인 해외 방문자 접속

이외에도…

검색엔진 최적화, 트위터 계쩡, 페이스북 메타테그 입력, 댓글알바, 기타 소셜 사이트 이용

Applines – 어도비에서 발행하는 웹 매거진 발행

영어가 가장 큰 장벽이지만, 영어가 원인은 아니다.

Modern Android Design Links

Action Bar

Official Design Guidelines – Action Bar

Navigation Patterns & Drawer

Google I/O 2013 – Structure in Android App Design

Google I/O 2013 – Android Design for UI Developers

ADiA – Navigation Drawer Deep Dive

Official Design Guidelines – Navigation Drawer Pattern

Official Developer Site – Navigation Drawer Implementation Training Class

Official Developer Site – Designing Effective Navigation

Official Developer Site – Implementing Effective Navigation

Fading Action Bar

Google Play Music

Sample Implementation by Cyril Mottier

Swipe to Refresh

Sample Implementation by Chris Banes

Cards

ADiA – Google Play Redesign

G+ Post by Nick Butcher with some additional links regarding Googles evolving design

Google I/O 2013 – Android Design for UI Developers

ADiA – Responsive Design

Android Developer Blog – Designing for Tablets

Official Developer Site – Designing for Multiple Screens



Official Design Guidelines

Official Design Guidelines – Pure Android

ADiA – Backward Compatible Design (for pre-ICS Holo design)

Sample of Community Design Tools and Libraries

Android Action Bar Style Generator – quickly generate a base Action Bar theme

Android Holo Colors Generator – quickly generate holo themes for other UI components

ActionBarSherlock – popular backport of system Action Bar to pre-Honeycomb

FancyExpediaWhatsAppTED


[후기]페이스북 DevCon 2013

markquery preview






페이스북의 앱센터를 이용하게 된다면 각 플랫폼에서 상위노출을 도와준다.

마켓 70% TOP 100

앱스토어 80% TOP 100

해외의 경우는 이런데, 국내는??



Parse인수 



모바일 게임에 대해 아시아시장을 주목 하고 있다.(특히 일본과 한국)





Open Graph 


어떤 앱을 사용하든 나의 페이스북 상태를 업데이트 할 수 있다. 



매일 10억 오픈 그래프를 통해 액션이 일어 난다.



타임라인 버전2: 오른쪽 나의 스토리, 왼쪽 이사람에 대한 정보

(버전1은 모든것이 시간순으로) 





웹서버 = Object API + 사용자 컨텐츠 = User Owned Objects  + 퍼블리싱 툴 = Native Share Dialog



* 웹서버가 없어도 SDK 3.5 에서 Object API를 통해서 퍼블리쉬 가능 하다.



기존 데이터 Open 그래프는 어떻게 하는가에 대한 생각 



Facebook SDK 3.5

빠른 로그인 다이얼로그, 20% 성능 향상, 5% 유입 증가, 



Intent로 “DeepLinking” String 으로 넘어 온다.



페이스북 11억 사용자 



Object Api를 이용하면 Common Story 를 만들수 있다. (아직 안드로이드는 안됨.)



Object Browser를 통해 api를 통해 Object인지 브라우저를 크롤러해서 만든 데이터인지 파악이 가능하다.





Custom Story Using Share Dialog

데이터를 모델화 

앱대쉬보드 커스텀스토리 설정 (페이스북 앱 설정)

opengrapic – storyies => create

그래프 API를 써서 화면을 구성하거나, 쉐어다이얼로그를 통해 화면을 띄운다.



type: commtype가 아닌 customtype



– 쉐어다이얼로그 UI와 오브젝트 API의 커스터마이징

오픈그래프 API를 써서…

자기만의 브랜딩을 표시할 수 있다.







페이스북 개발 히스토리



뛰어난 웹개발자들은 많았는데 앱개발자가 없어서, 웹기술을 이용하여 모바일 웹을 만들었다. 

웹에서 페이스북내에서 뭔가를 클릭하면 시간이 걸리는 경우 스피너에 대한 고려들 



모든사람들이 새로운것이 나왔다고 즉각적으로 수용하지 않는다. 이런 것 보다 사용자 경험에 집중 했다.



html을 가지고 IOS, Android를 커버 할수는 있었지만, 성능에 대한 문제점과 멀티스레딩 전략이 일관적으로 이루어 지지 않다. 앱의 경우 사용자액션에 영향을 줄 수 있기때문에, 메모리 관리 문제





이러이러한 문제점에 대해 

IOS 5.0기반에 네이티브코드를 사용하여 좀더 좋은 결과를 찾기 위해 여러팀 단위로 여러 앱을 만들어 보았다.(전쟁의방)



1년의 시간을 거쳐, 가장 흥미로운건 API를 통해 백엔드를 대체 할 수 있었다. 렌더링이 더잘되고 빨랐다.



코더데이터와 에니매이션에 대해 많은 실험을 했다. 내부 베타버전을 2012년 중반에 출시

=> 네이티브의 좋은 반응



사용자의 반응에 대한 2배 빨라졌다.



네이티브 좋은 반응으로 인해 모바일앱에 추가적인 피쳐들을 만들자.



고기능팀인 네이티브 모바일 앱 개발 팀을 만들었다. 모바일 기기에 있어서 최초와 최고가 되자.

뉴스피드에 대한 최초의 앱





뉴스피드팀과 모바일 앱개발팀과 서로다른 피드를 이야기 하고 있었다. 

2개의 팀이 같이 모여 열심히 공조 통합할 수 있도록 노력했다. 



=>회사내에서 모든 팀들이 통합될 수 있는게 중요하다고 생각되었다. 

각각의 팀이 피쳐들에 대한 우선순위를 매겼다.



The Team Sandwich을 만들었다.



Release Team : 릴리스에 대한 당담, 안정화 프로세스

Core Team: 지원 지지역할 (공유 라이브러리, 통합)



모바일 측면에 대한 최고의 회사가 되기 위한 기반을 만들었다.



페이스북같은 경우에는 매주 릴리스를 목적으로 업무처리 (병목현상없이)





– 개발 관련 



GIT을 쓴다. 분산개발과 병행해서 쓸수 있다. 

PHABRICATOR 코드리뷰

코드에 대한 리뷰어들이 코드에 대한 댓글을 달 수 있다. 이건 이상하다 이건 좋다 등등

QA부서가 없다.



개선된 테스팅 시스템, 오픈소스화 했다. 

xctool(iOS) github.com/facebook/xctool

buck(Android) github.com/facebook/buck




[후기]구글 개발자와 함께하는 GDG Korea Android 컨퍼런스

구글 개발자와 함께하는 GDG Korea Android 컨퍼런스

 

 

주말인데도 역시! 강연장을 꽉 채울 정도로 많이들 오셨습니다. 다들 영어도 너무 훌륭하게 잘 하시고, 열정적으로 배울려는 모습 정말 멋있었습니다.

못 오신 분들을 위해 핵심적인 내용만 정리 해드리겠습니다.

 

 


10 things you need to know about Android and Google Play – Tony Chan (Google)

 

첫번째 세션 토니 챈 이라는 구글 개발자가 안드로이드와 구글 플레이에 대해 알아야 할 10가지 사항이라는 주제는 가지고 발표 했습니다.

사실 어제 구글코리아 사무실에서 만나서 이와 관련된 부분을 이야기를 나누었는데, 그중에 핵심적인 내용만 골라서 발표를 해주셨네요.

디자인에 관한 것들이 거의 대부분 이였는데 다른 플렛폼이 아닌 구글 가이드 라인에 맞도록 잘 좀 따라 주면 좋겠다는 내용입니다. 디자이너 분들이 오셔서 들었으면 좋았을것 같네요.

 

 

 

다른 플렛폼의 UI를 모방하지 마라, 소프트메뉴인 경우 하단 버튼 메뉴를 사용 하지 마라.

리스트뷰의 아이템위에 또 다른 버튼을 넣지 마라. 특히 아이폰의 리스트뷰의 끝에 “>” 표시!

 

 

 

 px과 dp의 차이점을 확실하게 보여주는 그림 입니다. 아주 쉽게 이해 되네요.

dp는 어떠한 dpi의 사이즈에서도 같은 물리적인 크기를 보여준다는 개념입니다.

 

 

 

안드로이드는 기본적으로 dpi에 따라 스케일링을 지원한다.

 

 

 

Back에 대한 이벤트를 강제적으로 막지마라. 예를 들어 종료 할때 다이얼로그로 종료할지 한번더 물어 본다 던가..

 

 

 

노티피케이션을 뛰울때 핵심적인 정보만 표시 해라. 그리고 프라이어퍼티도 가이드라인에 맞게 지켜달라.

 

 

 

앱 퀄리티 체크리스트

 

 

 

구글 Play Service들..

 

 

 

별점을 높이기 위해 이벤트나 링크를 유도하는 것은 문제있다. 정책에 맞지 않으면 앱이 내려갈 수도 있으니 꼭 지켜달라.

 

 

 

▶ Google+ for Mobile Developers – Chris Cartland (Google)

 

 

Chris Cartland 구글 개발자분이 크롬북으로 발표를 진행 해주셨습니다.

Google+ 에 API, SDK대한 설명..

페이스북 SSO와 같이 서드파티에 대한 로그인 기능지원입니다. 앱설치부터 실행까지 가능하다는점도 있습니다.

IOS도 지원하는데, 모두 안드로이드 개발자 분들 이기 때문에 패스하는 모습만 기억이 남네요;;;;

 

자세한 사항은 https://developers.google.com/+/quickstart/android

 

 

헐리우드 액션 바 – 김태환 (Vingle)

 

 

액션바 사용시 탭바와 같이 쓰면 가로세로 모드에 따라서 최적의 뷰를 만들어 준다,

액티비티에 액션바가 있을떄 각각의 플레그먼트별로 디자인을 바꾸고 싶다면
각각의 플레그먼튼에 액션바에 대한 스타일을 지정해놓은 다음 플레그먼트 매니저의  onBackStackChageListener를 통해서 플레그먼트 변화를 알 수 있다.
리스너 한번 쓰고 없애자. 계속 호출 되면 문제가 있으니까.


안드로이드용 백엔드 앱 개발하기 – 고강태 (Thinkbee)

 

– node.js
javascript로 서버프로그래밍을 할 수 있다. 다양한 플렛폼 지원(윈도우, IOS)
npm을 통해서 라이브러리 제공(2만 4천개)

mongodb

– baas.io
kth에서 만든 것
국내 현실을 위해 만들어 졌다
open api를 쉽게 구축 할 수 있다.
android sdk제공으로 쉽게 구현 (os 2.2~ 이상 )

 

 

비동기 처리를 위한 Loader – 김기완 (IdeaFork)

안드로이드 프레임웍 (GUI) 싱글쓰레드
GUI는 데드락, 동기화등의 이유로 멀티쓰레드로는 구현이 어렵다.

VIew를 새로운 쓰레드로 동작시 Exception이난다. 반드시 메인쓰레드(handler post)를 통해 그려져야 한다.

– AsyncTask

~os 1.5 단인스레드 순차 실행
1.6 ~ 스레드 풀에 의한 멀티스레드
3.0~ 다시 단일스레드에서 순차 실행(멀치스레드 실행를 위해 onExecuteonExecuton()메서드로 실행)

문제점: 화면 회전시 액티비티를 재실행 하게 되는데, 회전전 백그라운드로 실행시 회전 후 다시 백그라운드가 호출 되게 되는 문제가 있다.

– save instance state 구현
반드시 구련 해라
백그라운드 진입시 메모리 부족할 경우 죽인다.
기존 죽이는 시간이 30분 인지 알았는데, 젤리빈은 0으로 되어 있다, 메모리가 높으리 우선 순위에 맞긴다.

onSaveins….(), onRetain…()

– Loader
Activity와 Fragment에서 원활한 비동기 데이터 로딩을 위해 OS 3.0 부터 등장 ( support lib v4를 통해 하위 버전 지원)

contentObserver를 통한 데이터 변경 감지 (컨텐트 프로바이더 리스트뷰 자동 갱신)
화면 회전 이슈 해결 구현 (onStop()시 회전하는지 백그라운드로 나가는지에 대한 관리가 철저하다)

AsyncTaskLoader를 확장 해서 사용(스로틀링 시간 지정, 최소 작업 시간 지정)
cursorLoader contentObserver를 구현하여 데이터 변경을 감지 하면 자동으로 다시 로드한다.

– LoaderManager
activity, fragment모두 지원

 

실행
initLoader
최초 실행, 백그라운드 로드

restartLoader
항상 백그라운드로

 

  • LoaderCallbacks

onCreateLodaer()
새로운 Loader가 필요 할때 호출된다.

onLoadFinished()
완료시 호출, 파라미터로 결과값을 넘겨준다.

onLoaderReset()
Loader가 리셋되어 가진 데이터를 더이상 사용 할수 없을 때 호출된다. 자원 해제

http://github.com/hi5pma/Loader… (예제)

CursorLoad와 CursorAdapter를 같이 쓰는 경우 중복으로 리쿼리 되므로  CursorAdapter의 AutoRequery를 꺼야 된다.

LoaderManager없이 Loader사용 가능하다. Cancel기능(16부터 사용가능)

아쉬운점

PreferenceActivity 에서는 사용 할 수 없다.

버그: Fragment에서 화면 회전이 일어 날때 onActivityCreated() 에서 initLoader()를 호출 하면 onLoadFinished()가 두번 호출 되는 버그가 있다.
=>Flag로 해결 하자.

 

 

 

안드로이드 뷰 렌더링의 이해 – 김용욱 (Thinkware)

 

기존의 호환성을 유지하면서 최상의 조건의 애니메이션을 만들자.

 

설정 – 개발자 옵션 (show GPU overDrawer 활성 – 4.2이상 Debug앱 만 가능)
불필요한 드로잉 발생을 알려 준다. 

blue 1x
green 2x
light red 3x
dark red 4x 이상

가장 이상적인건 red색이 나오지 않으면 좋다. 

우리의 소원은 2x

윈도우 배경 1회
뷰 배경 1회

효과적으로 뷰 그리기
윈도우 배경 제거

theme: windows:Background@null == code: getwindow().setBackground(null)

투명으로 지정해도 한번 그리게된다.

 

하드웨어 가속
android:hardwareAccelerated = “true”
높은 버전일수록 디폴트는 true인데 기기별로 다르다. 그래서 명시적으로 적어 주자.

한프레임 16ms를 지켜야 된다. 초당 60프레임이 나오기 위해

에니메이션을 빠르게 하는 방법 (젤리빈)

=>DisplayList Properties를 쓰자
alpha value,  translaation xy, scale xy, rotation xy

ObjectAnimator
ObjectAnimator.ofFloat(myObk, “alpha” ….).start();

ViewPropertyAnimation 이게 좀더 편리 하게 쓸 수 있다.(뷰에서만 쓸수 있다)

애니메이션 구현시 진저브레드 이하:  레거시 애니메이션, 이후 : 새로운 버전의 애니메이션을 쓰자.

SurfaceView(+GL)는 알파, 확대등 제한적인다.
대안: TextureView (젤리빈 이상)

 

앞으로 TextureView를 많이 쓰게 될것이다. 공부좀 해두면 좋을 것이다.

 

발표 자료-

Android App과 TDD – 임유진 (Kakao)
http://goo.gl/1WyAz
(Download 클릭 후 Download anyway 클릭하세요.)

Hollywood ActionBar – 김태환 (Vingle)
http://goo.gl/NdMLa

안드로이드 앱 클라우드 서비스 개발 R4 – 고강태 (Thinkbee)
http://goo.gl/tPqD1

비동기 처리를 위한 Loader – 김기완 (IdeaFork)
http://goo.gl/o5hVp

Butter Android Views – 김용욱 (Thinkware)
http://goo.gl/3Y0K8

 

 

[후기]제1회 구글 안드로이드 오픈소스 코드 랩

제1회 구글 안드로이드 오픈소스 코드 랩 






GDG Korea Android에서 오픈소스 라이브러리 활성화를 위해, 라이브러리 소개 및 오픈소스를 이용하여 어플리케이션을 직접 개발하여 경험을 공유하기해 마련한 자리에 다녀왔습니다.


 




사실 저는 오픈소스는 보안에 취약하고 내 코드가 아니니까 버그가 많으며, 이것저것과 합쳐 지면 어떤 문제가 발생 될지 모르는 불안감으로 잘 사용하지 않았습니다.


그래서 이번기회를 통해 이런 인식을 좀 바꿔볼까 생각 해보고 참석을 하게 되었습니다.


 






인원은 약 30명정도로 6개팀을 만들어 한 팀당 1명의 멘토를 붙여 좀 더 원활한 진행을 해주시려고 노력을 많이 하신듯 하구요, 중간중간 간식 또한 최고였습니다.


주말인데도 참석하셔서 열정적으로 배울려고 하시는 개발자분들 정말 멋있었습니다.




현업에서 SVN을 써왔는데, Github을 간략하게 설명도 해주셨습니다. Github는 한번더 중간 과정이 있다? 라고 생각 하면 쉽게 받아들여 질듯 하네요.








코드 랩에서 소개해주신 주요 오픈 소스 라이브러리를 소개 해드리겠습니다.


 


MenuDrawer


아주 유명한 오픈소스로, 페이스북이나 카카오톡등을 보면 옆으로 슬라이딩하는 UI를 쉽게 구현해줍니다.

http://simonvt.github.com/android-menudrawer

 


 


ActionBarSherlock


Android 3.0 이상부터 ActionBar가 생겼는데, 이하 버전에서 지원을 위해 만들어진 오픈소스입니다.


http://actionbarsherlock.com


 


 


Pull-to-refresh


리스트에서 위로 끌어 올리면 새로고침하는 UI를 쉽게 구현해주는 오픈소스입니다. 오픈소스를 공개하신분이 구글에 입사하셨다네요.


https://github.com/chrisbanes/Android-PullToRefresh


 


 


ImageLoader


로컬이미지가 아닌 외부 서버를 통해 이미지를 로드를 쉽게 구현 해줍니다. 캐싱기능 지원 뿐만아니라 리스트뷰의 특성인 뷰 재활용으로 인해 나타나는 문제점들 까지 보완된 오픈소스입니다. 간단하게 4줄의 코드면 된다고 합니다.

http://androidimageloader.com/

 


 


HttpResponseCache


Android 4.0이상에 있는 Http 응답을 캐싱해주는 기능을 그이하 버전에서 구현할 수 있도록 도와주는 오픈소스 입니다.


https://github.com/candrews/HttpResponseCache


 


 


Google-gson


json을 Java Object로 변환해주는 오픈소스입니다.


https://code.google.com/p/google-gson/


 


 


Jsoup


파이썬 Html 파싱 라이브러리의 자바버전으로, html 파싱을 좀더 쉽게 할 수 있습니다.


http://jsoup.org/




이 외에도 ACRA, Bugsense 버그리포팅, 구글 애널리틱스에 대해 설명 해주셨습니다.


 


ImageLoader의 같은 경우, 현업개발시에 나타난 문제점을 고스란히 해결책을 제시하여 오픈소스로 공개 했다는 점에서 놀랐습니다. 좀 더 일찍 알았다면 좋았을껄.. 




 


 


이러한 라이브러리는 가지고 YouTube API로 플레이리스트를 불러와서 해당 영상을 보여주는 간단한 앱을 개발해보는 시간을 가졌습니다.


완성된 코드는 https://github.com/huewu/gdg_opensource_code_lab 에서 보실 수 있습니다.


 






이렇게 완성도 높은 오픈소스를 공개하는 개발자들이 존경스러웠고, 저도 기회가 된다면 오픈소스 개발에 도전 해보고 싶어졌습니다.






안드로이드 앱개발을 취미로 하시는분, 중학생부터 대학생까지, 현업에서 안드로이드 앱 개발하시는분들 모두 다양하신분들이 참석 하신것 같았습니다. 다양한 연령의 개발자가 모여 이것저것 이야기하며 즐거운 시간을 보냈습니다.


 


그리고 1회 치고는 너무 많은 준비를 해주셔서 감사드리며, 앞으로 2,3..회 나날이 발전하는 행사가 되었으면 좋겠습니다.