Android Weekly 143~146 ๋ฆฌ๋ทฐ
๋ฐ๋ฆฐ Android Weekly ๋ชฐ์๋ณด๊ธฐ!
Reverse engineering using Androguard - Part 1
Androidguard๋ผ๋ apk ๋ฆฌ๋ฒ์ค์์ง๋์ด๋ง ๋๊ตฌ๋ฅผ 2 ํํธ์ ๊ฑธ์ณ ์๊ฐํ๋ค. ํ์ง๋ง ๋๊ฒ ์ํ๋ ๊ฑด ์์ค์ฝ๋์ผํ
๋ฐ, ๊ธ๋ง ์ฝ์ผ๋ฉด manifest, layout xml, resource ๋ฑ์ ์ ๋ณด๋ง ์ป์ ์ ์๋ ๊ฒ ๊ฐ๋ค. ๋ญ๊ฐ REPLํ์์ผ๋ก ๋์ํด์ ํธํ ๊ฒ ๊ฐ๊ธด ํ๋ฐ ์ธ ์ผ์ด ์์๊น?
Nexus 4 + MultiROM = the ultimate Android testing device
๋ฅ4์ MultiROM์ด๋ ํ๋ก๊ทธ๋จ์ ์น์ผ๋ฉด kitkat~lollipop๋ฑ์ ์ ์ ๋กฌ ๋ฟ ์๋๋ผ cyanogenmod๋ฑ์์ ๋ง๋ ์ปค์คํ
๋กฌ ๋ฑ์ ์์ฝ๊ฒ ๊ต์ฒดํด์ ๋ถํ
ํ ์ ์๋๋ณด๋ค. ์ฅ๋๊ฐ ์ฑ ์๋ ์ด์ ์ฌ๋ฌ ์๋๋ก์ด๋ ๋๋ฐ์ด์ค์์ ํ์๋ก ํ
์คํธํด ๋ด์ผ ํ๋๋ฐ, ํ๋์ ๋๋ฐ์ด์ค์์ ์ฌ๋ฌ ๋ฒ์ ์ ๋ฐ๊ฟ๊ฐ๋ฉฐ ์คํํด๋ณผ ์ ์์ผ๋ ํธํ๊ฒ ๋ค. ํ์ง๋ง ๋ด ๊ฒฝ์ฐ์๋ ํ์ฌ์ ์ฌ๋ฌ ๋๋ฐ์ด์ค๊ฐ ์๊ณ , ๋ด๊ฐ ๊ฐ์ธ์ ์ผ๋ก ๋ง๋ค์ด๋ดค์ ์ฅ๋๊ฐ ์ฑ ์์ค์ด๋ผ ์ธ ์ผ์ด ์๋ ์ถ๋ค.
Scrolling RecyclerView โ Part 3
RecyclerView์ smooth scroll์ duration์ด ์์ด์, ์ฌ๊ธฐ์ duration์ ์ถ๊ฐํ ๊ตฌํ์ ์ค๋ช
ํ๋ค. duration ์์ฒด๋ ๊ทธ๋ฅ ํ์์น ์์ ๋ณด์ด์ง๋ง, ๋ด๋ถ์ smoothscroll ๋ก์ง, smoothscroller ์ค๋ช
์ ์์๋๋ฉด ๋์์ด ๋ ๊ฒ ๊ฐ๋ค.
CREATING A WATCH FACE WITH ANDROID WEAR API | PART 1
๋ ํํธ์ ๊ฑธ์ณ ์๋๋ก์ด๋ ์จ์ด์ฉ ์์นํ์ด์ค๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์ค๋ช
ํ๋ค. ์ค์ ํ๊ณ , ์ค์ ์ ์ ์กํ๋ ๋ถ๋ถ๊น์ง ๊ผผ๊ผผํ๊ฒ ์ค๋ช
ํ๊ณ ์์ด์ ์์นํ์ด์ค ๋ง๋ค ์ผ์ด ์์ผ๋ฉด ์ฐธ๊ณ ํ๋ฉด ์ข์ ๋ฏ ํ๋ค. ์๋๋ก์ด๋์์น ํ๋ ์ฌ์ผํ ํ
๋ฐ...
Continuous Delivery for Android
์ ๋ช
ํ CI ๋๊ตฌ์ธ jenkins๋ฅผ ์๋๋ก์ด๋ ์ฑ ๊ฐ๋ฐ ํ๋ก์ธ์ค์ ํ์ฉํ๋ ๋ฐฉ๋ฒ์ ์๋ ค์ค๋ค. pull request - merge ํ ๋น๋ ์ฌ๋ถ ํ์ธํ๊ธฐ, lint ๋๋ฆฌ๊ธฐ๋ฑ์ ์ผ๋ฐ์ ์ธ ํ์คํฌ ์ธ์ ์ง์ ๋ง๋ signing plugin๋ ์๊ฐํ๊ณ , Google Play Android Publisher Jenkins Plugin๋ก ๋ฐฐํฌ๊น์ง ํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช
ํ๋ค. ์๋๋ก์ด๋ ๊ฐ๋ฐ ํ๋ก์ธ์ค์ CI๋ฅผ ์ ์ฉํ ์๊ฐ์ด ์๋ค๋ฉด ์ ์ฉํ ๋ฏ!
Don't break the chain: use RxJava's compose() operator
์๋๋ก์ด๋ ๊ฐ๋ฐ์ ์ฌ์ด์์ ํ์ฐฝ ์ ํ์ค์ธ RxJava์ compose() ๋ช
๋ น์ ์ค๋ช
ํ ๊ธ. applySchedulers ๋ผ๋ ์์
์ ์์๋ก ๋ค์ด compose๋ฅผ ์ฝ๊ฒ ์ค๋ช
ํ๋ค. RxJava๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ์์๋๋ฉด ์ข์ ๋ฏ ํ๋ค. ์ด ๊ธ์ ์ด Daniel Lew ์์ ์จ๋ square ์ฌ๋์ผ๋ก ์๊ณ ์๋๋ฐ, ์ด ํ์ฌ๋ ๊ดด๋ฌผ๋ค๋ง ๋ค๋๋.
์๋๋ก์ด๋์ ๋ค์ด์ผ๋ก๊ทธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ด์ ๊ต์ฅํ ๋ง์์ก๋ค. holo style, material stype๋ฑ๋ฑ. ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ material design์ ์ฑ์ฉํ๋๋ฐ, ๋จ์ ๋์์ธ ๋ฟ ์๋๋ผ ํ๋จ์์ ์ฅ ์ฌ๋ผ์ค๋ ํํ๋ ์ง์ํ๋ค. ์ค์ฐ! API 10+
A useful stack on android #3, compatibility
๋กค๋ฆฌํ์์ ์ถ๊ฐ๋ vector drawable, reveal animation ๋ฑ์ ๊ตฌ๋ฒ์ ์์ ๋ค๋ฃฐ ๋ ์ด๋ป๊ฒ ํด์ผ ํ๋์ง ์ค๋ช
ํ๋ค. ๋๊ฐ์ด๋ ๋ชปํด๋ ์ผ์ถ ๊ทธ๋ด์ธํ๊ฒ ์ ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ค๋ฃฌ๋ค. ๊ทธ๋ฐ๋ฐ ์ฝ์ด๋ด๋ ๊ฝค ๋ง์ os ๋ฒ์ ์ ๋ค๋ค์ผํ๋ ์
์ฅ์์ , ๊ฒ๋ค๊ฐ ์ด์ํ ๋๋ฐ์ด์ค๊ฐ ๋๋ฌด ๋ง์์ ์๋๊ฐ ๋์ง ์๋๋ค. T_T
A New Reference App for Multi-device Applications
๋ฉํฐ ๋๋ฐ์ด์ค ์ ํ๋ฆฌ์ผ์ด์
์ด๋ผ๊ณ ํด์, ์ฌ๋ฌ ๋จ๋ง์์ ๋ญ๊ฐ ์ฑํฌ๊ฐ ๋๋ ์ฑ์ธ์ค ์์๋๋ฐ ์๋๋ก์ด๋, ์๋๋ก์ด๋ ์คํ , ์๋๋ก์ด๋ ์จ์ด ๋์ํ ์ฑ์ด๋ ์๋ฏธ์๋ค. ๋ฏธ๋์ด ํ๋ ์ด์ด์ธ๋ฐ, ๋์ค์ ์คํ ๋ ์จ์ด์ฉ ํ์ฅ์ ๋ง๋ค์ด์ผ ํ๋ค๋ฉด ์ฐธ๊ณ ํ๋ฉด ์ข์ ๋ฏ ํ๋ค. ์๋ฌด๋๋ ๊ตฌ๊ธ ์ํ์ด๋ ๋ฏฟ๊ณ ์ฐธ๊ณ ํด๋ด์ง ํ๋ค.
Supporting multiple themes in your Android app (Part 2)
์๋๋ก์ด๋ theme๋ ๋๋ฌด ๋ณต์กํ๋ฐ, ์ด ๊ธ์ ํ ์ฑ์์ ์ฌ๋ฌ theme๋ฅผ ์ ์ฉํ ๋ ์ฐธ๊ณ ํ ๋ด์ฉ์ ์ ์ ๋ฆฌํด ๋์๋ค. ๊ตณ์ด ๋์ ์ผ๋ก theme์ ๊ฐ์์น์ธ ์ผ์ด ์๋๋ผ๋ ์ฐธ๊ณ ํด ๋ ๋งํ ๋ด์ฉ์ด ๋ง๋ค. theme์ custom attribute ์ ์ฉํ๊ธฐ, ์ด์ง ์ธ๊ธ๋ drawable์ theme์ ์์ฑ ์ ์ฉํ๊ธฐ ๋ฑ๋ฑ.
์ค๊ฐ์ ์ด์ง ์ธ๊ธ๋๊ธด ํ๋๋ฐ, api level 21 ๋ฏธ๋ง์์ drawable์์ ์์ฑ๊ฐ์ ์ฐพ์๊ฐ๋ ๋ถ๋ถ์ ๋ฒ๊ทธ๊ฐ ์๋๋ณด๋ค. ํํผ ๋ฐฉ๋ฒ์ google i/o 2014 ์ฑ์ ํฝ์ค๋ฅผ ์ฐธ๊ณ ํ๋ผ๋๋ฐ, ์ ๊ฒ ํฝ์ค๊ฐ ๋ง๊ธด ํ๊ฐ?
๋กค๋ฆฌํ์ ์ถ๊ฐ๋ tint๋ฅผ color filter๋ฅผ ์ด์ฉํด ํ๋ด๋ด๋ ๋ฐฉ๋ฒ๋ ์ ์ฉํด๋ณด์ธ๋ค. ์ด ๋ฐฉ๋ฒ์ ์ด์ฉํ๋ฉด ์ฑ์ bitmap resource ๊ฐฏ์๋ฅผ ์ค์ผ ์๋ ์๊ธฐ ๋๋ฌธ์ ๋์์ด๋๋ ํ์ํ ๋ฏ ํ๋ค.
Kotlin for Android (I): Introduction
์๋ฐ์ ๋์์ผ๋ก ์ธ๊ธ๋๋ jvm ๊ธฐ๋ฐ ์ธ์ด์ธ kotlin์ ๊ฐ๋ตํ ์๊ฐํ๋ ๊ธ์ด๋ค. ์ ์ jake wharton์ด ์ด ๊ธ๋ ์ฝ์ด๋ณด๋ฉด ๋์์ด ๋ ๋ฏ. ๊ฐ์ฅ ํ์ค์ ์ธ ๋์์ด ๋ ๋ฏ ํ๋ค. ๋ null check ๋ถ๋ถ์ด ๊ฐ์ฅ ์ธ์์ ์ด์๋ค. ๊ตณ๊ตณ!
Android MVP - An Alternate Approach
์๋๋ก์ด๋ ์ฑ ์ค๊ณ ์ Actiivty๊ฐ ๋๋ฌด ๋ง์ ์์
์ ํ๋ค๋ ์ ์ด ํญ์ ์ง์ ์ด ๋๋ค. ์ด ๊ธ์ MVP ์คํ์ผ์ ์๋๋ก์ด๋์ ์ ๋ชฉํ๊ธฐ ์ํ ์ ์์ ๋ฐฉ์์ ์๊ฐํ๋ค. ๊ธฐ์กด์ ๊ตฌํ๋ค์ MVP ํจํด ์ ์ฉ ์ Activity๊ฐ view ์ญํ ์ ํ๋ค๊ณ ํ๋๋ฐ, ์ด ๊ธ์์ activity์ presenter์ญํ ์ ๋งก๊ฒผ๋ค. ๋ด๊ฐ ์ ์ฉํด์๋ ํจํด๋ activity๊ฐ presenter ๋น์ค๋ฌด๋ฆฌํ ์ญํ ์ ํ๊ธฐ ๋๋ฌธ์ ์คํ๋ ค ์ด๋ฌํ ์ค๊ณ ๋ฐฉ์์ด ๋ฏ์ต๊ฒ ๋ค๊ฐ์๋ค. ์์ฆ์ MVP ํจํด ๊ตฌํ์ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก mortar๊ฐ ๋ง์ด ์ธ๊ธ๋๋๋ฐ, mortar๋ฅผ ์ด์ฉํ๋ฉด ์ด๋ป๊ฒ ๊ตฌํํ ์ ์๋์ง๋ ์ดํด๋ด์ผ๊ฒ ๋ค.
How to publish your open source library to Maven central
gradle ๊ธฐ๋ฐ์ ํ๋ก์ ํธ๋ฅผ maven central์ ์ฌ๋ฆฌ๋ ๋ฐฉ๋ฒ์ ์๊ฐํ๋ค. ์์ ์ ์ค์ด๋ฃ๊ธฐ๋ก ๊ผญ mvn์ ๊น์์ผ๋จ ์ฌ๋ฆด ์ ์๋ ๊ฒ ๊ฐ์๋๋ฐ, ์ด์ gradle๋ง์ผ๋ก๋ ํผ๋ธ๋ฆฌ์๋ฅผ ํ ์ ์๊ตฌ๋!
TIPS AND TRICKS FOR ANDROID MATERIAL SUPPORT LIBRARY 2: ELECTRIC BOOGALOO
๋จธํฐ๋ฆฌ์ผ ๋์์ธ ์ค ripple effect๋ฅผ ์ ์ฉํ๋ ๋ฐฉ๋ฒ, ๋ค์ด์ผ๋ก๊ทธ์ ์ํ๋ ํ
๋ง ์ ์ง์ ํ๋ ๋ฐฉ๋ฒ, ํ์ ๋ฒ์ ์์๋ ๊ฐ๋จํ tint๋ฅผ ์ ์ฉํ๋ ๋ฐฉ๋ฒ(๊ฒฐ๊ตญ ๋ฒ์ ๋ถ๊ธฐ ํ์ colorfilter ๋จน์ด๋ ๋ฐฉ๋ฒ์ด๋ค)์ ์ค๋ช
ํ๋ค. ๋จธํฐ๋ฆฌ์ผ ๋์์ธ์ ํจ๊ณผ๋ฅผ ์
ํ๊ฑฐ๋ผ๋ฉด ๊ฝค ์ ์ฉํ ํ์ด๋ค.
Going multiprocess on Android
์๋๋ก์ด๋ ์ฑ์ ๊ธฐ๋ณธ์ ์ผ๋ก ํ๋์ process๋ก ์คํ๋๋ค. ํ์ง๋ง manifest์ android:process ์์ฑ๋ง ์ฃผ๋ฉด ์๋น์ค, ์กํฐ๋นํฐ ๋ฑ ํด๋น ์ปดํฌ๋ํธ๋ ๋ณ๊ฐ์ ํ๋ก์ธ์ค๋ก ์คํ๋๋ค. ์ด๋ ๊ฒ ํ๋ก์ธ์ค๋ฅผ ์ชผ๊ฐ๋ฉด ํ๋ก์ธ์ค๋ ๊ฐ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น๋ฐ๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ข ๋ ์พ์ ํ๊ฒ ํ๋ณดํ ์ ์๊ณ , ์์
ํ๋ ์ด์ด์ ์์
ํ๋ ์ด ์๋น์ค์ ๊ฐ์ด ๊ณ์ ์ํ๋์ด์ผ ํ ํ์๊ฐ ์๋ ์ปดํฌ๋ํธ๋ ui๋ฅผ ๋ด๊ณ ์๋ ํ๋ก์ธ์ค๊ฐ ์ด๋ฐ ์ ๋ฐ ์ด์ ๋ก ์ฃฝ์ด๋ ์คํ์ ๋ณด์ฅ๋ฐ๊ธฐ๊ฐ ์์ํ๊ธฐ ๋๋ฌธ์ ์ ์ฉํ๋ค. ํ์ง๋ง ํ๋ก์ธ์ค๊ฐ ๋ถ๋ฆฌ๋๋ฉด vm๋ ๋ถ๋ฆฌ๋์ด ๋ฒ๋ฆฌ๊ธฐ ๋๋ฌธ์ static field๋ ๋์ผ ์ฐธ์กฐ๊ฐ ์๋๊ฒ ๋๋ ๋ฑ ๋ ํ๋ก์ธ์ค ๊ฐ ๋ฐ์ดํฐ ๊ตํ์ด ์ฝ์ง ์์ ์ ์๋ค. ์ ์ค๊ณํด์ ๋ค๋ฅธ ํ๋ก์ธ์ค์์ ๋๋ ์๋น์ค๋ ๋ณ๊ฐ์ ๋ฐ์ดํฐ๋ค์ ์ฌ์ฉํ๊ณ , ui ํ๋ก์ธ์ค์๋ intent๋ handler๋ฑ์ ์ด์ฉํด ๋
๋ฆฝ์ ์ผ๋ก ๊ตฌ์ฑ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ฉด ๋ฌธ์ ๋ ํด๊ฒฐํ ์ ์์ ๊ฒ ๊ฐ๋ค. ๋ง์ ์ฝ์ง.
์ฌํผ ์คํ์ ๋ณด์ฅ๋ฐ์์ผ ํ๋ ๋ฐฑ๊ทธ๋ผ์ด๋ ์๋น์ค๋ฅผ ๊ฐ์ง ์ฑ์ด๋ผ๋ฉด ์ฐธ๊ณ ํ๋ฉด ์ข์ ๊ธ์ด๋ค.
Android UI Automated Testing
๊ตฌ๊ธ ํ
์คํ
๋ธ๋ก๊ทธ์ ์ฌ๋ผ์จ ๊ธ์ด๋ค. ๋ค ์ฝ์ด๋ณด๋ฉด ์ข๊ธด ํ๋ฐ, ๋ง์ง๋ง์ ์น์ ํ๊ฒ ์์ฝ์ด ๋์ด ์์ผ๋ ์ด๊ฑฐ๋ผ๋ ์์๋์.
UI ํ
์คํธ๋ฅผ e2e test(end to end test: ์ค์๋ฒ๊น์ง ๋ชจ๋ ์ฐ๋ํ ์ํ์์ ์คํํ๋ ํ
์คํธ)์ ํํ๋ก ํ์ง ๋ง. ๋์ ๋จ์ ํ
์คํธ, ํตํฉ ํ
์คํธ, UI ํ
์คํธ๋ฅผ ๋ง๋ค์ด์ ์คํํด.
fake server ๋ฑ ํ์ฉํด์ ๋
๋ฆฝ์ ์ผ๋ก ์คํ๋๋๋ก ํด.
ํ
์คํธํ๊ธฐ ์ฝ๋๋ก ์์กด์ฑ ์ฃผ์
๊ฐ๋ฅํ๊ฒ ์ฑ์ ๋ง๋ค์ด.
์ ํ๋ฆฌ์ผ์ด์
์ ๋ชจ๋, ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ชผ๊ฐ์ ๋
๋ฆฝ์ ์ผ๋ก ํ
์คํธ๋ฅผ ํด. ๊ทธ๋ฆฌ๊ณ ์ด ๋ชจ๋๋ค์ ํตํฉ ํ
์คํธ๋ฅผ ๋ง๋ค์ด์ ๊ฒ์ฆํด.
์ปดํฌ๋ํธํ ํ ui ํ
์คํธ๋ e2e ํ
์คํธ๋ณด๋ค ํจ์ฌ ์ํ์๋ ๋น ๋ฅด๊ณ ์์ ์ ์ด๋๊น ๊ผญ ์ด๋ ๊ฒ ํด.
์... ์ฐธ ์ค์ฒํ๊ธฐ ์ด๋ ค์ด ๋ง์ด๋ค.
Material Design Navigation Drawer
sizing, styling, navigating์ 3๋ถ์ ๊ฑธ์ณ navigation drawer์ ๋จธํฐ๋ฆฌ์ผ ๋์์ธ์ ์
ํ๋ ๊ณผ์ ์์ ๊ณ ๋ฏผํ ๊ฑฐ๋ฆฌ๋ค์ ๋ค๋ฃฌ๋ค. ๊ฑฐ์ ๋
ผ๋ฌธ์์ค์ผ๋ก ๊ตฌ๊ธ์ ์ฌ๋ฌ ์ฑ๋ค์์ navigation drawer๊ฐ ์ด๋ป๊ฒ ์ ์ฉ๋์๋์ง ๋น๊ตํ๋์ง ๋ค๋ฃฌ๋ค. ์๊ธฐ๊ฒ๋ ๊ตฌ๊ธ ์ฑ๋ค์์ ์กฐ์ฐจ ์๋ก ๋ค๋ฅด๊ฒ ๋์ํ๊ณ ์๋ค๋ ๊ฒ ํจ์ . ์ง๊ธ์ ์์ google i/o 2015๋ฅผ ๊ฐ์ฅ ๋ ํผ๋ฐ์ค ๋ชจ๋ธ๋ก ๋ณด๋ ๊ฒ ๋ง์ ๋ฏ ํ๋ค. ํ์ฌ๊ฐ navigation drawer๋ฅผ ์ฌ์ฉํ๊ณ , ์ต์ ํธ๋ ๋์ ๋ฐ๋ง์ถฐ ๊ตฌํํ๊ณ ์ถ๋ค๋ฉด ๊ผญ ์ฝ์ด๋ด์ผ ํ ๊ธ์ด๋ค.
1๋ถ sizing์์ ํญ, ์๋จ ์ด๋ฏธ์ง์ ๋์ด, ํ๋กํ ์ด๋ฏธ์ง ์ฌ์ง ํฌ๊ธฐ ๋ฑ์ ๋ค๋ฃฌ๋ค.
ํญ: ํฐ์์ 320dp, ํ
๋ธ๋ฆฟ์์ 400dp ์ max๋ก. ๋ณธ๋ฌธ์๋ ์ธ๊ธํ Material Design on Android Checklist์์ ํญ์ ๋ค์๊ณผ ๊ฐ์ด ์ ์ํ๋ค. ๊ต์ฅํ ๊ตฌ์ฒด์ ์ด์ด์ ์ญ์ ๊ตฌ๊ธ์ค๋ฝ๋ฌ๊น. > No wider than 320dp on phones and 400dp on tablets, but no narrower than the screen width minus the standard toolbar height (360dp - 56dp = 304dp on the Nexus 5)
ํค๋ ๋์ด: ํญ: ๋์ด = 16:9 ๋ก ๋์ด๋ฅผ ์ค์
ํ๋กํ ์ฌ์ง: ๋์ถฉ 64dp๊ฐ ์ด๋ฐ ์ ๋ฐ ๊ธฐ๊ธฐ์์๋ ๋ณด๊ธฐ ์ข๋๋ผ~
2๋ถ ์คํ์ผ๋ง์์ ๋จธํฐ๋ฆฌ์ผ ๋ค์ด์ค๋ฉด์ ํผ๋์ด ์์๋ ๋ช๊ฐ์ง ํญ๋ชฉ์ ๋ค๋ฃฌ๋ค.
๋์ด: ์ผ์ชฝ์์ ํ์ด๋์ฌ๋ ์ํ๋ฐ๊น์ง ๋ฎ๊ณ , ์ค๋ฅธ์ชฝ์์ ํ์ด๋์ฌ ๋ ์ํ๋ฐ๋ฅผ ์๋ฎ๋๋ค.
์์ด์ฝ: DrawerArrowStyle์ <item name=โspinBarsโ>true</item> ์์ฑ์ ์ฃผ๋ฉด ๋ฉ์ง ์ ๋๋ฉ์ด์
์ด ๋์จ๋ค. ํ์ง๋ง ๋จธํฐ๋ฆฌ์ผ ๋ค์ด์์ ๋๋ก์๊ฐ ์ก์
๋ฐ๋ฅผ ๋ฎ๊ธฐ ๋๋ฌธ์ ์ด ์ ๋๋ฉ์ด์
์ ๋ณผ ์ผ์ด ์๋ค(์งธ๋ ค๋ด์ผ ๋ณด์ธ๋ค). ์ธ๋ฐ์๋ ์ ๋๋ฉ์ด์
์ ๋๋๊ฒ ๋ซ๋ค. ์ ์์ฑ์ false๋ฅผ ์ค๋ ์๋ํ ๋๋ก ๋์ํ์ง ์์๋ค. ๊ทธ๋์ onDrawerSlide ๋ฉ์๋๋ฅผ overrideํด์ ํด๊ฒฐํ๋ค.
ํ๋กํ ์ฌ์ง: ๋ณด๋๋ฅผ ์ฃผ์ง ์๋๋ค. ๋ฅ๊ธ๊ฒ ๊น๋๋ค. ํฌ๊ธฐ๋ ์์ ์ธ๊ธํ 64dp ์์ค.
์ปค๋ฒ ์ฌ์ง: ์คํํด ๋ดค๋๋ 40~50% ๊ฒ์ ์ ๋จน์ธ๊ฒ ์ด์๋๋ผ. ์ํ๋ฐ ์์ ์น์ฌ์ผ ํ๋ฏ๋ก ScrimInsetsFrameLayout ๊ฐ๋ค์จ๋ผ.
์ ํ ํญ๋ชฉ๋ค: ๊ตฌ๊ธ ์ฑ๋ง๋ค ์ ๊ฐ๊ฐ์ธ๋ฐ ๋์ถฉ ์ด๋ ๊ฒ ํ๋๊ฒ ๋ซ๊ฒ ๋๋ผ. ripple ์ดํํธ ๋จน์ด์.
์ ํ ํญ๋ชฉ์ header/ footer: header๋ pinningํด ๋๋๊ฒ ๋ง๋ ๊ฒ ๊ฐ๊ณ (์ฆ, ํญ๋ชฉ ๋์ด๋๋ ์คํฌ๋กค ์๋๊ฒ ๊ณ ์ ํด ๋ฌ์ผ๊ฒ ๊ณ ), footer๋ ํญ๋ชฉ ๋ง์ ๋ pinningํ์ง๋ง ํญ๋ชฉ ์ ์ ๋ ๊ทธ๋ฅ ๋งจ ๋ง์ง๋ง ํญ๋ชฉ ๋ค์์ ์์ฐ์ค๋ฝ๊ฒ ๋ถ์ด์. <- ๊ทผ๋ฐ ์ด๊ฑฐ ๊ตฌํํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ์ง? listview ๋์ด์ (item ๋์ด * ํญ๋ชฉ ์) ๋น๊ตํด์ ๊ณ์ฐํด์ผ ํ๋? @_@
3๋ถ ๋ด๋น๊ฒ์ดํ
์ ๊ตฌํ๊ณผ ๊ด๊ณ๋ ์๋, ๋ด๋น๊ฒ์ด์
์๋ก ์ ์ธ ์ด์ผ๊ธฐ๋ฅผ ํ๋ค. ํ๋ฒ๊ฑฐ ๋ฉ๋ด๋ผ๊ณ ๋ถ๋ฅด๋ ๋ด๋น๊ฒ์ด์
๋๋ก์๊ฐ ๋์ค๋ฉด์ ์๋ ๋ฐฉ์์ธ ๋์๋ณด๋ ์คํ์ผ์ด ํ์๊ฐ ์์ด์ก๋ค. ํ์ง๋ง ๋ด๋น๊ฒ์ด์
๋๋ก์ ์ ์ฉ ์ ๊ณ ๋ฏผํด์ผ ํ ๋ถ๋ถ์ด ์๊ฒผ๋ค. ๋๋ก์๊ฐ ์๋ ํ๋ฉด์ ์๊ฑด์ ๋ค์๊ณผ ๊ฐ๋ค. * ํ์ฌ ํ๋ฉด์ ๋๋ก์๊ฐ ์กด์ฌํ๋ค. + ์กด์ฌํจ์ ์ฌ์ฉ์๊ฐ ์ ์ ์๋ค (ํ๋ฒ๊ฑฐ ์์ด์ฝ ๋ฑ) * ํ์ฌ ํ๋ฉด์ ํ์ (sibling) ํ๋ฉด์ด ์กด์ฌํ๋ค. ์ฆ, ๋ด๋น๊ฒ์ด์
ํธ๋ฆฌ ์์์ ๋์ผ depth์ ๋ค๋ฅธ ํ๋ฉด์ด ์กด์ฌํจ. * ํ์ฌ ํ๋ฉด์ด ํธ๋ฆฌ์ ์ต์์ ๋
ธ๋์ด๋ค.
์
(up) ๋ด๋น๊ฒ์ด์
ํ๋ฉด์ ์๊ฑด์ ๋ค์๊ณผ ๊ฐ๋ค. * ํ ํ๋ฉด์ ๋ถ๋ชจ/์์ ํ๋ฉด์ด ์กด์ฌํ๋ค. * ํ ํ๋ฉด์ด ์ต์์ ํ๋ฉด์ด ์๋๋ค. * ๋ฐ๋์ ๊ฑฐ์ณ๊ฐ์ผ ํ๋ ํ์ ํ๋ฉด์ด ์กด์ฌํ์ง ์๋๋ค.
๋ด๋น๊ฒ์ด์
๋๋ก์์ ๊ฐ์ฅ ํฐ ๋ฌธ์ ๋ ์ฌ์ฉ์๊ฐ ์ด ๋
์์ ์กด์ฌ๋ฅผ ์์์ฐจ๋ฆฌ์ง ๋ชปํ๋ค๋ ๊ฒ์ด๋ค. ์ ์ธ์ค ์ง๋ฆฌ ๊ทธ์ด์ง ์์ด์ฝ ๊ฐ์ง๊ณ "์, ์ฌ์ด๋ ๋ฉ๋ด ์กด์ฌํ๋๊ตฐ!" ์์์ฐจ๋ฆด ์ฌ์ฉ์๋ ๊ทนํ ์ ์ผ๋. ํด์ฐ. ์ด๊ฑด ๋์ฒด ์ด์ผ ํ์ด์ผ ํ ๊น?
A Blurring View for Android
ํฌ๋ช
์ก์
๋ฐ๋ฅผ ๋ถ์ด๊ณ , ์๋ก ์คํฌ๋กคํ๋ฉด ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง๊ฐ ์ฅ~ ๋ธ๋ฌ๋ง๋๋ ๋ฐฉ์์ด ํ๋ ์ ํํ๋ค. ๊ทผ๋ฐ ๋จธํฐ๋ฆฌ์ผ ๋์ค๊ณ ๋ ๋ค์์ ์ด๋ฐ ์ ํ์ด ์ฌ๋ผ์ง ๊ฒ ๊ฐ๊ธฐ๋ ํ๋ค. ์ฌํผ ๋ธ๋ฌ๋ง์ด ๋ง์ด ์ฝ์ง ์์นซ ์๋ชปํ๋ฉด ๊ต์ฅํ ๋ง์ ์ฐ์ฐ์ด ํ์ํด์ ์ฑ ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น ์์๊ฐ ๋ง์๋ค. ๊ตฌํ์ฒด๋ ์์ java, render script, ndk ๋ฑ๋ฑ์ด ๋๋ฌดํ๊ณ .
์ด ๊ธ์ 500px์์ ํ์ฉํ ๋ธ๋ฌ๋ง ๋ทฐ ๊ตฌํ์ ์๊ฐํ๋ค. ๋ฐ๋ชจ ๋น๋์ค์์ ๋ณด๋ฏ ์ค์๊ฐ ๋ธ๋ฌ๋ง์ด ๊ฐ๋ฅํ๋ค. ๋ค๋ฅธ ๊ตฌํ๋ค์ ๋๊ฒ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ๋นํธ๋งต ๊ฐ์ง๊ณ ๋ธ๋ฌ๋ง๋ ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค์ด๋ด๊ธฐ ๋๋ฌธ์ ๋์์๊ณผ ๊ฐ์ ์ค์๊ฐ ๋ธ๋ฌ๋ง์ ํ๊ธฐ ํ๋ค๋ค. renderscript๋ฅผ ์ด์ฉํด ๊ตฌํํ๊ณ , ์ด์ renderscript support library๊ฐ ์๊ธฐ ๋๋ฌธ์ froyo๋ถํฐ ์ง์๊ฐ๋ฅํ๋ค๊ณ ํ๋ค. ํ์ง๋ง ์๋ฌด๋ฆฌ ๊ทธ๋๋ ์ฑ๋ฅ ์๊ฐํ๋ฉด ๊ทธ๋ฅ 4.0 ์ด์ ์ ๋๋ถํฐ ๋์ํ๊ฒ ํ๋๊ฒ ๋ชจ๋๋ฅผ ์ํด ์ข์ ๋ฐฉ๋ฒ์ด์ง ์ถ๋ค.
๋ง์ฝ blur ์ฒ๋ฆฌ๊ฐ ํ์ํ๊ฒ ๋๋ค๋ฉด ๊ธฐ์ตํด๋๋ค๊ฐ ์คํํด๋ด์ผ๊ฒ ๋ค.
The mysterious case of the Bundle and the Map
hashmap์ intent bundle์ ๋ฃ์๋ค ๋นผ์ค๋ฉด ๋ฌธ์ ๊ฐ ์์ง๋ง, treemap์ ๋ฃ์๋ค ๋นผ๋ฉด ClassCastException์ด ๋๋ค. ์ ๋ TreeMap์ ๋ฃ์๋๋ฐ ๋ฝ์์ฌ ๋ ๋๋ฐ์์ด HashMap์ด ๋๋๊ฐ!
TreeMap map = (TreeMap) getIntent().getSerializableExtra("map"); java.lang.ClassCastException: java.util.HashMap cannot be cast to java.util.TreeMap
์ด ์ด์ ๋ฅผ ์ด~์ฌํ ์ค๋ช
ํ๋ค. ๋๊ฐ Parcel.writeMap ๋ด๋ถ์์ ๋งต์ ํ์ด์ ์ ์ฅํ๊ณ , ์ด๊ฑธ ๋ณต๊ตฌํ๋ readHashMap์์ HashMap ํํ๋ก ๋ณต๊ตฌํ๊ธฐ ๋๋ฌธ์ด๋ผ๊ณ ์์๋๋ฉด ๋๊ฒ ๋ค. ํ๋ง๋๋ก: intent์ ๋งต ๋๊ธธ ์ผ ์์ผ๋ฉด HashMap์ ๋ด์์ ๋๊ธฐ์. ์๋๋ฉด map์ serializeํ๋ ๊ฐ์ฒด๋ก ํ๋ฒ ๋ ๊ฐ์ธ์ ๋ฃ๋์ง.
Introducing Yahnac: Where RxJava Meets Firebase and Content Providers
Firebase, rx, cursor loader๋ฅผ ์ด์ฉํด ๊ตฌํํ yahnac(Yet Another Hacker News Android Client)๋ผ๋ ์ฑ์ ์๊ฐ์ด๋ค. github์ ์์ค์ฝ๋๋ ์ ๊ณตํ๋, ์ ๋ค์ ์ฎ์ด์ฐ๋ ๋ถ๋ถ์ด ๊ถ๊ธํ๋ค๋ฉด ์ดํด๋ณด๋ฉด ๋์์ด ๋ง์ด ๋ ๋ฏ ํ๋ค. ๋์ถฉ ์๊ฐ๋ง ์ฝ์ผ๋ฉด firebase๋ก ์ ๊ณตํ๋ ๋ฐ์ดํฐ๋ฅผ rx๋ก ๋ก๊ฒจ db์ ์ ์ฅํ๊ณ , ์ด๊ฑธ cursorloader๋ก ui๋ก ๋ก๊ฒจ๊ฐ๋ ๊ตฌํ์ธ ๋ฏ ํ๋ค. cursorLoader๋ก ๋ก๊ฒจ๊ฐ๋ ๊ฑด ์ข ์๋ค๋ฅธ ๋ฏ?
Stetho for Android debug builds only
ํ์ด์ค๋ถ์์ ๋ง๋ ๋๊ตฌ์ธ stetho๋ฅผ debug ๋น๋์๋ง ์ ์ฉํ๋ ๋ฐฉ๋ฒ์ ์๊ฐํ๋ค. stetho ์ ๋ง ๋ฌผ๊ฑด์ด๋ค. chrome์ chrome://inspect ๋ฅผ ํตํด ์ฑ์ network, db๋ฅผ ํฌ๋กฌ ๊ฐ๋ฐ์ ๋๊ตฌ๋ฅผ ์ด์ฉํด ์กฐํํ๋ ๋๊ตฌ์ธ๋ฐ, ์ ๋ง ํธํ๋ค. ๋ ํฌ๋กฌ ๊ฐ๋ฐ์ ๋๊ตฌ๊ฐ ์๋ ์ ๋ง๋ค์ด์ ธ์ ๋คํธ์ ๋ก๊น
๋ณด๋๋ฐ ์ด๊ฒ๋ณด๋ค ๋์ ๋๊ตฌ๋ฅผ ๋ณธ ์ ์ด ์๋ค. ์์ผํต์ ์ ๊ฒฝ์ฐ๋ ์ ์ ํ ๋๊ตฌ๋ฅผ ์๋ด์ ์ฌ์ฉํ๋ฉด ์~ ๋ค์ฌ๋ค๋ณผ ์ ์๋ค. db๋ ์ฟผ๋ฆฌ๋ฅผ ์ง์ ๋ ๋ ค๋ฒ๋ฆด ์ ์์ด์ ์ง์ง ์งฑ์ด๋ค!
TexView๋ฑ์ ์ ์ฉํ ์ ์๋ ์ปฌ๋ฌ ์คํฌ์ ์๊ฐํ๋ค. ์๋๋ก์ด๋์ span์ ๊ต์ฅํ ๊ฐ๋ ฅํ๊ณ ์ ์ฐํ๋ฐ, ์ด๋ฆฌ์ ๋ฆฌ ๋๋ฌ๋ด๋ ๊ทธ๋ฅ Html.fromHtml() ๋ฉ์๋๋ฅผ ์ด์ฉํ๋ ๋ฐฉ์์ด ์ ์ผ ํธํ๋๋ผ. ํ์ง๋ง ์ด ๊ธ์์ ์๊ฐํ ColorStateListSpan ๊ฐ์ ๊ฒ์ ๊ฒฐ๊ตญ ๋ง๋ค์ด์ ์จ์ผํ๋๋ฐ, ์๋ง ์ฐ๋ฉด ์ ์ฉํ ๋ฏ ํ๋ค. ํ์ง๋ง ๋๊ฒ๋ ๊ทธ๋ฅ style ์์ค์์ ํด๊ฒฐํ๊ธฐ ๋๋ฌธ์ ๊ตณ์ด ์ด๋ฐ ํด๋์ค๊ฐ ํ์ํ ๋ฐ์ง.
์ข ์ง๋๊ธด ํ์ง๋ง, ์ด ๊ธ์ span ๊ด๋ จ ๊ธฐ๋ฅ์ ์์ฃผ ์ ์ ๋ฆฌํด๋์๋ค. ์งฑ!
Using the JobScheduler API on Android Lollipop
๋กค๋ฆฌํ์ ์ถ๊ฐ๋ JobScheduler API๋ฅผ ์์ธํ ์๊ฐํ ๊ธ์ด๋ค. ๊ทผ๋ฐ ์ด๋ฐ api๋ ๋จ์ ui๊ฐ์ด ๋ณด์ฌ์ฃผ๊ณ ๋ง๊ณ ์ ๋๊ฐ ์๋๋ผ ์ฑ์ ๊ธฐ๋ณธ์ ์ธ ํ๋์ ์ํฅ์ ๋ผ์น๊ธฐ ๋๋ฌธ์ api level๋ณ๋ก ๋ถ๊ธฐํด์ ์ ์ฉํ๊ธฐ๋ ์ฝ์ง ์์์ ์ด๋ค ์ ๋ต์ ์จ์ผ ํ ์ง ๊ฐ์ด ์ค์ง ์๋๋ค. ์ถฉ์ ์์ํ๋ฉด์ wifi ์ฐ๊ฒฐ๋ ๋ ์๋ฒ ๋๊ธฐํ ํ๋ฒ ๋ก๊ฒจ์จ๋ค๊ฑฐ๋ ํ๋ ๊ฒฝ์ฐ์ ์ ์ฉํ ๊ฒ ๊ฐ๊ธด ํ๋ฐ, ๊ทธ๋ผ ํ์ api ๋ ๋ฒจ์์ ์ด๋ป๊ฒ ํด์ผ ํ ์ง. ๋์ด ํ์ด๋ฐ์ด ๋๋ฌด ๋ฌ๋ผ์ง๋ฉด ๊ทธ๊ฑด ๋ ์ด๋ป๊ฒํ๊ณ . ์ด๋ฐ ์ ๋ฐ ๊ณ ๋ฏผํ๋ค๋ณด๋ฉด ์ฌ์ฉ ๋ชปํ ๊ฒ ๊ฐ์๋ฐ ๋ง์ด์ง. ๊ทธ๋ ๋ค๊ณ ํธ๊ธฐ๋กญ๊ฒ min api level 21๋ก ํ ์๋ ์๊ณ .
MโโโModel in MVC, MVP, MVVC in Android
์ฌ๋ฐ๋ ๊ธ์ด๋ค. ํํ๋ค MVC ๋ฑ์ ์ธ๊ธํ ๋ M์ ๋จ์ entity ํด๋์ค ์์ค์ผ๋ก ์๋ชป ์ดํดํ๊ณ ์๋๋ฐ, ๊ทธ๊ฒ ์๋๋ผ ์ํฐํฐ๋ฅผ ๋ค๋ฃจ๋ ์ ์ฒด ๊ณ์ธต(layer)์ด๋ผ๋ ์ ์ ์ง์ ํ๋ค.
MVC์์ M์ ๋จ์ UserModel.java ์์ค์ผ๋ก ์๊ณ ์๋ค๋ฉด, ์ด UserModel์ db์์ ๊ฐ์ ธ์จ๋ค๊ฑฐ๋ ๋คํธ์์์ fetchํ๋ ์์
์ ์ค๋กฏ์ด C์ ๋ชซ์ด ๋์ด์ผ ํ๋๋ฐ, ์ด๋ฌ๋ค๋ณด๋ฉด user fetch ์ฝ๋๊ฐ ์ด C, ์ C ์ ํฉ์ด์ง ์ ๋ฐ์ ์๋ค. ์ค๊ณํ๊ธฐ์ ๋ฐ๋ผ C๋ ์กํฐ๋นํฐ๊ฐ ๋ ์๋, ๋ฐ๋ก ์ ์ํ ํด๋์ค๋ค์ด ๋ ์ ์๊ฒ ๊ณ . UserModel์ด๋ ์ํฐํฐ๋ฅผ db๋ ๋คํธ์์์ fetchํ๋ค๊ฑฐ๋ ํ๋ ๊ฑด ๋ชจ๋ ๋ชจ๋ธ ๋ ์ด์ด ์์์ ์ฒ๋ฆฌํด์ผ ํ๋ค๋๊ฒ ๊ธ์ด์ด์ ์ฃผ์ฅ์ด๋ค. ๋๊ฒ UserModelApi ๋ UserModelRepository ๋ฑ์ ํด๋์ค๊ฐ ์ด๋ฐ ์ญํ ์ ๋ด๋นํ ๋ฏ? ์ฌํผ C๊ฐ activity๋ผ๋ฉด activity๋ ๋จ์ํ ์ด๋ค ํด๋์ค์ ๋งค์๋๋ฅผ ํธ์ถํ๊ธฐ ๋๋ฌธ์ ์ฝ๋ ์ค๋ณต์ ์ฌ์ง๊ฐ ์ค์ด๋ค๊ฒ์ด๋ค.
๋๋ ์ด๋ฐ ๊ตฌ์กฐ์ ๋์~
Android Performance Case Study Follow-up
์ ๋ช
์ธ romain guy์ ์๋๋ก์ด๋ ๊ทธ๋ํฝ ํผํฌ๋จผ์ค ๊ด๋ จ ๊ธ์ด๋ค. ์ฌ๊ธฐ์ Tracer๋ผ๋ ๋๊ตฌ๋ฅผ ์ด์ฉํด OpenGL ๊ด๋ จ ๋ช
๋ น๋ค์ด ์ฌ์ฉํ๋ ์๊ฐ์ ํ์ธํ๊ณ , ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ํ์
ํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋ค. ์์์์ ์ํ๊ฐ ๊ด๋ จ ๋ฌธ์ ๋ก ๊ต์ฅํ ๋ง์ ๋ช
๋ น์ด ์ผ์ด๋ฌ๋ค.
์... ๊ทผ๋ฐ ์ด๋ ต๋ค. OpenGL ๊ด๋ จ ๋ด์ฉ์ ๋ชจ๋ฅด๋ ์ Tracer ๊ฒฐ๊ณผ๋ฅผ ๋ด๋ ๋ญ๊ฐ ๋ฌธ์ ์ง ์๊ธฐ ์ด๋ ต๋ค. T_T
kotlin์ผ๋ก ์ง Bandhook ์ด๋ผ๋ ์ ํ๋ฆฌ์ผ์ด์
์ด๋ค. ์ค์ฐ, kotlin์ผ๋ก ์ฑ ๋ง๋ค ์ผ ์์ผ๋ฉด ์ฐธ๊ณ ํ๋ฉด ๋ง์ด ๋์์ด ๋ ๋ฏ ํ๋ค!
Introducing Fresco: A new image library for Android
ํ์ด์ค๋ถ์์ ๋ง๋ ์ด๋ฏธ์ง ๋ก๋(๋ณธ๋ฌธ์์ ํ์ดํ๋ผ์ธ์ด๋ผ๊ณ ์๊ธฐํ์ง๋ง...)์ธ fresco๋ฅผ ์๊ฐํ๋ ๊ธ์ด๋ค. ์ ๋ฐ๋ถ์ ์ฃฝ~ ์ค๋ช
ํ ๋ถ๋ถ์ ์งง๊ฒ ์์ฝํ์๋ฉด AndroidBitmap_lockPixels ๋ผ๋ NDK ๋ช
๋ น์ ์ด์ฉํด ashmem์ด๋ผ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ด๋ฏธ์ง๋ฅผ ๋ก๋ฉํ๋ค. ์ด ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๋ค์ดํฐ๋ธ ํ ๋น์ค๋ฌด๋ฆฌํ ๊ณต๊ฐ์ธ๋ฐ, lazyํ๊ฒ ๋ฉ๋ชจ๋ฆฌ๋ฅผ freeํ๋ ํน์ง์ด ์๋จ๋ค. BitmapFactory.Options.inPurgeable=true ์ต์
๋ ์ด๋ฏธ์ง๋ฅผ ashmem์ ์ฌ๋ฆด ์ ์์ง๋ง, ์ด๋ฏธ ๋ฉ๋ชจ๋ฆฌ๊ฐ unpinned๋ ์ด๋ฏธ์ง๋ฅผ ๋ค์ ๊ทธ๋ ค์ผ ํ ๋ ์ด๋ฏธ์ง ๋์ฝ๋ฉ์ด UI ์ฐ๋ ๋์์ ์ผ์ด๋๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค. inBitmap ํ๋๊ทธ๋ ์ข์๋ฐ, ์ผ๋จ 3.0 ์ด์์์๋ง ๋์ํ๊ณ , 4.4 ์ด์ ์ ๊ฐ์ ํฌ๊ธฐ์ ์ด๋ฏธ์ง์์๋ง ๋จนํ๊ธฐ ๋๋ฌธ์ ์ฐ๊ธฐ ์ฝ์ง ์๋ค. ํ์ง๋ง ์๊ธฐ๋ค์ด ์ฌ์ฉํ ์ ๋ช
๋ น์ด๋ฅผ ์ด์ฉํ๋ฉด ๋ฉ๋ชจ๋ฆฌ release๋ง ์กฐ์ฌํ๋ฉด, ๋ ๋ง๋ฆฌ ํ ๋ผ๋ฅผ ๋ค ์ก์ ์ ์๋ค๊ณ ํ๋ค. ๋ฐฑ๊ทธ๋ผ์ด๋ ๋์ฝ๋ฉ์ผ๋ก ์ฑ๋์ ์ก๊ณ , ashmem ์์ญ์ ์ด์ฉํด lazy free ํ ์์ ํ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ํ๋ณดํ๊ณ . GC๋ ํ์์๊ณ .
๋ ํ๋, drawee๋ผ๋ ์ด๋ฏธ์ง ๋์คํ๋ ์ด ํ๋ ์์์ ๋ง๋ค์๋จ๋ค. ์ด๋ฏธ์ง ๋ก๋ฉ ์ placeholder๋ฅผ ๋ณด์ฌ์ฃผ๋ค ๋ก๋ฉ ํ ์๋ณธ ์ด๋ฏธ์ง๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ ๋ฑ์ ์์
์ ์์ฐ์ค๋ฝ๊ฒ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์๋๋ก์ด๋์ Drawable์ ์ด์ฉํ๋๋ฐ, ์ด ๊ฐ ์ํฉ์ ๋ง๋ Drawable์ ๋ณด์ฌ์ฃผ๊ณ ์กฐ์ํ๊ณ ํ๋ ๋ฑ์ ์์
์ ํด ์ฃผ๋ ํ๋ ์์์ธ๊ฐ๋ณด๋ค.
fresco๊ฐ ๋๋ฌด ๋ณต์กํ๊ณ ๋ฌด๊ฒ๋ค๋ ์ง์ ์ ๋ณธ ์ ์ด ์๋๋ฐ, ํ๋ฒ ์ํ์ด๋ผ๋ ๋๋ ค๋ด์ผ๊ฒ ๋ค. ์์ง๊น์ง ํ์
์์ ์ฐ๊ธฐ์ glide๊ฐ ๊ฐ์ฅ ์ข์ ์ ํ์ด๋ผ๊ณ ์๊ฐํ๋๋ฐ, fresco๋ ์ด๋จ๋ฐ์ง.
The Making of Falcon Pro 3
falcon pro 3๋ผ๋ ์ฑ์ ๋ง๋๋ ๊ณผ์ ์ ์ด์ผ๊ธฐ๋ฅผ ๋ด์ ์๋ฃ๋ค. ๊ธ url์ ๋ณด๋ฏ์ด sqlite๊ฐ ์๋๋ผ realm์ db๋ก ์ฌ์ฉํ ์ ์ด ๋์ ๋๋ค. ๊ทธ ์ธ์ picasso, retrofit, otto, butterknife ๋ฑ ์ญ์ ๋ชจ๋ ์ฌ๋๋ค์ด ์ฌ์ฉํ๋ square ์คํ์์ค๋ค์ ํ์ฉํ๋ค. realm ์ฌ์ฉ ๋ถ๋ถ์ด ๊ฝค ์ฌ๋ฐ๋ค. ์ฑ์ ๊น์์ ์จ ๋ณด๋ ์ ๋ง ๋น ๋ฆฟ๋น ๋ฆฟํ๊ฒ ์ ๋ง๋ค์๋ค!