라벨이 Android인 게시물 표시

[Android] @AutoValue 에 대하여.

이미지
An Introduction to AutoValue 라는 글을 보면서 @AutoValue의 사용에 대해 한글로 정리된 글이 별로 없어서 아래와 같이 정리해본다. ( An Introduction to AutoValue 에서 예시들을 가져왔음을 밝힌다) 우선 들어가기 전에 Java에서 유명한 책인 Effective Java의 저자 Joshua Bloch가 AutoValue와 관련해서 아래와 같은 말을 했다고 한다. "AutoValue is a great tool for eliminating the drudgery of writing mundane value classes in Java. It encapsulates much of the advice in Effective Java Chapter 2, and frees you to concentrate on the more interesting aspects of your program. The resulting program is likely to be shorter, clearer, and freer of bugs. Two thumbs up." --  Joshua Bloch, author, Effective Java 위의 말을 발로 번역을 해보자면 "AutoValue는 평범한 Value Class 작성의 힘든 작업들을 줄여주기 위한 훌륭한 툴이다.  Effective Java 2장의 많은 Advice들을 캡슐화해서, 당신의 프로그램에서 흥미로운 부분에 좀 더 집중할 수 있게 해준다. 그 결과로 프로그램은 좀 더 짧아지고, 깨끗하지며, 버그로부터 자유로워 질수 있다. 쌍따봉!!" --  Joshua Bloch, author, Effective Java 은근 책을 홍보하는 내용이 담겨있기는 하지만, AutoValue는 우리 코드 작성을 줄여주는데 도움을 주는 도구이다. 라는 정도만 이해하고 진행하도록 하자. 1. 기본적인 용도 Android를 개발하다보...

[번역] [Android Performance] Launch-Time Performance

이미지
Launch-Time Performance In this document Launch Internals Cold start Warm start Lukewarm start Profiling Launch Performance Time to initial display Time to full display Common Issues Heavy app initialization Heavy activity initialization Themed launch screens 사용자는 앱이 반응과 로드가 빠른것을 기대한다. 시작 시간이 느린 앱은 이 기대를 충족시켜주지 못하며, 사용자를 실망시킬 수 있다. 이것류의 경험으로 인해 사용자는 Play Store에서 앱을 나쁘게 평가하거나, 앱을 완전히 버리게 될 수 있다. 이 문서는 앱의 실행시간을 최적화 하는데 도움을 주는 정보를 제공한다. 우선 Launch process의 내부구조부터 설명한다. 다음은 어떻게 시작성능을 프로파일 하는지에 대해 이야기 하고, 마지막으로 보편적인 startup-time issue들에 대해 설명하고, 해결방법에 대한 몇가지 힌트를 제공한다. 참고 : https://www.youtube.com/watch?v=Vw1G1s73DsY Launch Internals 앱 실행은 3가지 상태중 하나에서 시작될 수 있다. 각 상태(콜드 start, 웜 start, 미지근한 start[lukewarm start])는 사용자가 앱을 볼 수 있는데 걸리는 시간에 영향을 준다. 콜드 Start에서는 앱은 처음부터 시작한다. 다른 상태에서는, 시스템은 앱을 백그라운드에서 foreground로 가져와야 한다. 추천하는 바는 항상 콜드 스타트라는 가정에서 최적화를 해야한다는 것이다. 이렇게 하면 웜 Start/Lukewarm Start의 성능도 향상시킬 수 있다.  앱의 빠른 시작을 위한 최적화를 위해 시스템레벨과 앱 레벨에...

[번역] [Android] Background Optimizations

Background Optimizations In this document Restrictions on CONNECTIVITY_ACTION Scheduling Network Jobs on Unmetered Connections Monitoring Network Connectivity While the App is Running Restrictions on NEW_PICTURE and NEW_VIDEO New JobInfo methods New JobParameter Methods Further Optimizing Your App 백그라운드 프로세스는 메모리 혹은 배터리를 많이 소모할 수 있다. 예를들어 Implicit Broadcast는 해당 브로드캐스트를 확인하기 위해 등록된 많은 백그라운드 프로세스를 시작하게 될 것이다. 비록 그 프로세스들이 많은 작업을 수행하지 않을지라도... 이것은 디바이스의 성능과 사용자 경험에 상당한 충격을 줄 수 있다.  이 이슈를 완화하기 위해 Android 7.0에서는 아래 제약사항들이 적용되었다. Android 7.0을 Target으로 하는 앱들 혹은 그 이상의 앱들은 manifest에 브로드캐스트 리시버를 등록하더라도  CONNECTIVITY_ACTION  를 받을 수 없다. 하지만 앱들은 브로드캐스트 리시버를 context가 유효한 상태에서  Context.registerReceiver()  를 사용할 경우  CONNECTIVITY_ACTION  를 받을 수 있다. Apps cannot send or receive  ACTION_NEW_PICTURE  or  ACTION_NEW_VIDEO  broadcasts. 앱들은  ACTION_NEW_PICTURE  또는  ACTION_NEW_VIDEO  브로드캐스트를 보내거나 받을 수 없다. 이 최...