구글 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개 팀 모두 수고많았습니다. 다음에 좋은 인연으로 또 만났으면 좋겠네요 🙂