※Notes記事では、英語のセッション動画やポッドキャストの内容を(雑に)英語でメモに書き残すことを行っています。本記事は、あくまで動画を見ながら、参考程度に読んでいただくことを想定しています。Notes記事には雑メモ程度のものだったり、書き起こしのようなものもあります。これから実際の動画を見る際には、本記事の内容が少しでもお役に立てば幸いです。(内容において不備、誤字脱字等ありましたら気軽にご連絡いただけると嬉しいです!m(__)m)
本記事は、Modern Android development: Android Jetpack, Kotlin, and more (Google I/O 2018)のNotes記事です。

Android History#
2008 - Android 1.0
2013 - Android Studio
2014 - ART, RecyclerView
2017 - ConstraintLayout, Kotlin, AAC, Studio Profilers
2018 - ktx, Paging
Tools#
Layout Inspector
Trace View -> Systrace
New Profiler Tab in Android Studio
Memory Tracking
Layout Design
- ConstraintLayout
Runtime in Language#
Dalvik#
Optimized for Space
JIT optimizations not as powerful
Slow Allocation/collection
Heap fragmentation
So#
Avoid allocations(e.g. Don’t use Enums!)
Primitive types are cool
ART#
Optimized for performance
JIT + AOT
Faster allocation/collection
Heap defragmentation
Large object heap
So#
Allocate as necessary(Yes, even enums)
Use appropriate types
But#
Phones are still constrained
Buttery is important
Java#
Started with Java 1.5
Extremely popular
Available great tools
Slow adoption of newer versions
Kotlin#
Official support in 2017
Close collaboration with Jetbrains
Many great features that make code more enjoyable to write & read
Android project can contain both Kotlin & Java
Lint checks in Android Studio
Java -> Kotlin conversion
Android Kotlin Extension
Kotlin Style Guide
Kotlin Interop Guide
Benefits of Kotlin#
Extensions
Inline functions
Operators
De-structuring assignments
Data classes
Lambdas
Now, new Java APIs in the platform starting with Android P will follow the code convention of Kotlin that when there is a SAM interface as parameter, it goes at the end of the list of parameters.
APIs#
AbsoluteLayout => Deprecated
LinearLayout => Okay for simple cases
FrameLayout => Okay
GridLayout => Don’t use
RelativeLayout => Don’t use
ConstraintLayout => Use it. 2.0 Soon!
AdapterViews
Fragments#
Complicated
Core platform bugs+fixes => Core Platform API @deprecated
Use Support Library Fragments
Improvements ongoing, plans for more
New Navigation component simplifies fragment transactions
Activities#
Android apps consist of many activities
Navigating launches an activity
Use single activities when possible
- One per entry point
Richer, more continuous use experience
Fragments are not necessary, but can help
- Navigation component, too
Architecture#
No recommendation for architecture before
- Handling Android Lifecycle
Lifecycle#
AAC: Lifecyle
Fragment implements LifecycleOwner
AppCompatActivity implements LifecycleOwner
Activity and Lifecycle-Dependent-Thing now gets seprated
Views and Data#
Activity had too much stuff
Views
Data for Views
Lifecycle tracking
Data change tracking
Live Data and ViewModel#
Activity now only contains Views and reference for ViewModel
Activity observes LiveData
Data#
- Do it your own! => Room
Room#
Local data persistence via SQLite
Compile-time validation
LiveData integration
Idea from Repository Pattern#
Activity/Fragment
↓
ViewModel(contains LiveData)
↓
Repository
-> Model(Room) -> SQLite
-> Remote Data(Retrofit) -> WebService```
### Data Paging
- Paging Library 1.0
- Works with RecyclerView
- Fine-grained item changes, bindings
- Uses background threads
- Flexible data fetching options
- Integration with Room
- Boring name
## Graphics
- OpenGL ES 1.0 => OpenGL ES 3.1/3.2, Vulkan
- Software rendering => Hardware accelerated rendering
- Nine patches => Vector Drawables
- TextureView vs SurfaceView => Use SurfaceView, not TextureView
- Managing bitmaps by hand => Recommended Libraries: Glide, Picasso, Lottie
## Final Thoughts
- Profile your code => Profile your code
- Avoid work when possible
- Minimize memory consumption
- Devices are still resource-constrained
- Battery life is critical
- Bandwidth is precious
- User experience matters
## 所感、個人的に特に印象に残ったことなど
- 可能であれば1 Activityに極力しよう、というのを公式として今回方針を明言しているのは大きいなと感じました
- Java APIの作りもKotlinを意識した形にする、というのは最高そうですね!
- Navigation Component、AAC LifecycleによってFragmentも扱いやすくなった、というようなわりとFragmentが肯定される内容だったのかなと
- サードーパーティー製のライブラリも良いものは使っていこう(Retrofit, Glide, Picassoなどが本動画には登場しています)という姿勢も、全て結果的には良いUXを提供しようというところにつながっていて、説得力というか納得感もあり実際それによって開発者も悩み少なく良いアプリを作れる、というWin-Winな形があるなぁと感じました
以上です!