AW210: TrimMemory를 이용한 앱 상태 확인, 당신이 몰랐던 안드로이드 스튜디오 사용법

Android Weekly는 매주 발행되는 안드로이드 뉴스레터입니다. 영어 기사를 정독할 시간이 없는 분을 위해 핵심 꼭지를 요약했습니다.

주간 안드로이드 뉴스를 요약해 드립니다. Android Weekly 210 원문도 읽어보세요.


홈 버튼 오버라이드가 필요 없는 이유

누군가 “홈 버튼을 오버라이드 할 수 있나요?”라고 물으면 왜 오버라이드 하고 싶은지 그 의도를 먼저 파악해볼 필요가 있습니다. 아마도 궁극적으로 홈버튼을 오버라이드 하고 싶은 이유는 사용자가 언제 어플리케이션을 나가는지를 알고싶어서겠죠~

다르게 얘기하면 앱이 foreground와 background에 있는지 알 수 있다면, 우리는 현재 앱 상태에 따라 사용자에게 메시지 등을 적절한 방식으로 제시할 수 있을겁니다.

  • 앱이 백그라운드에 있다?! ActivityManager#getRunningTask를 사용하지 않고서도 앱이 백그라운드에 있는지 알 수 있는 참신한 방법을 소개합니다!

“TrimMemory”(API 14)를 활용해 앱이 백그라운드에 있는지 확인할 수 있습니다.

public class MyApplication extends Application {
    // ...
    @Override
    public void onTrimMemory(int level) {
        super.onTrimMemory(level);
        if (level == TRIM_MEMORY_UI_HIDDEN) {
           isBackground = true;
           notifyBackground();
        }
    }
    // ...
}

이런 개발 뉴스를 더 만나보세요

  • 화면이 꺼졌다? 주의할 점은 위의 onTrimMethod()가 화면이 꺼지면 불리지 않는다는 것입니다. 그래서 우선 화면이 꺼져있는지 여부를 확인해야겠죠.
public class MyApplication extends Application {
  // ...
  @Override
    public void onCreate() {
        super.onCreate();
        // ...
        IntentFilter screenOffFilter = new IntentFilter(Intent.ACTION_SCREEN_OFF);
        registerReceiver(new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
              if (isBackground) {
                  isBackground = false;
                  notifyForeground();
              }
            }
        }, screenOffFilter);
      }
}
  • 앱이 다시 foreground로 돌아왔다? flag나 trim레벨에서 앱이 다시 foreground에 돌아왔는지에 대해서 알 수 있는 방법이 없습니다. 그래서 우리가 사용 할 수 있는 것은 Application#registerActivityLifecycleCallbacks()입니다.
public class MyApplication extends Application {
    // ...
    @Override
       public void onCreate() {
           super.onCreate();

           registerActivityLifecycleCallbacks(new Application.ActivityLifecycleCallbacks() {
               // ...
               @Override
               public void onActivityResumed(Activity activity) {
                 if (isBackground) {
                     isBackground = false;
                     notifyForeground();
                 }
               }
               // ...
           });
       }
       // ...
}

정리하면 위 방법을 활용하면 홈버튼을 오버라이드하지 않아도 된다는 결론에 이릅니다. 전체 코드는 안돼, 홈버튼은 오버라이드 할 수 없어…근데 그럴필요도 없어~ (No, You Can Not Override the Home Button… But You Don’t Have To!)에서 확인해보세요~

안드로이드 스튜디오 꿀팁

안드로이드 스튜디오는 꽤 많은 유용한 도구들을 포함하는 강력한 IDE입니다. 하지만 그 유용한 도구가 무엇인지 알아야 의미가 있겠죠~ 전문가처럼 안드로이드 스튜디오 사용하기 (Use Android Studio Like a Pro!)에서 제시하는 안드로이드 사용 팁 정리해드립니다!(아래 제시되는 숏컷은 Mac OS기준)

  • 키보드 숏컷 사용하기 Presentation Assistant

  • 액션 검색 IntellyJ IDE는 액션 검색 도구를 제공합니다. 이름이나 수행으로 액션을 검색할 수 있습니다. 아래 그림처럼 다이얼로그 창에서 어떤 숏컷을 사용할 수 있는지 볼 수 있고 만약 키보드 숏컷이 없다면 이 다이얼로그에서 바로 새로운 숏컷을 생성할 수 있습니다. 필요한 액션을 찾아 option + Return을 누르세요!

  • 스킴 변경 경우에 따라 다른 개발자와 협업을 하거나 공용컴퓨터를 사용한다면 안드로이드 스튜디오의 키맵이나 레이아웃 설정을 수시로 변경해야 할 때가 생깁니다. 이때 할 수 있는 방법은
    1. 각 개발자가 사용하는 키맵과 기타 세팅 정보를 Action Export Settings로 Export시킴
    2. 공용으로 사용하게 될 컴퓨터의 안드로이드 스튜디오에서 위 파일을 Import받음
    3. Quick Switch Scheme을 사용해 편하게 설정을 변경하면서 사용!!!(Ctrl + `) Quick Switch Scheme으로 키맵뿐만 아니라 코드 스타일과 뷰 모드 등을 변경할 수 있습니다.
  • 방해 금지 모드(Non-distraction Mode) 기본적으로 안드로이드 스튜디오를 열면 수많은 패널을 확인할 수 있는 구조입니다. 만약 내가 사용하는 부분외에 다른 것을 감추려면 Cmd + Shift + F12를 누르세요!! 만약, 여전이 이 화면의 다양한 아이콘과 레이블이 신경쓰이신다면 Distraction Free Mode를 추천합니다! 뷰 메뉴에서 해당모드로 변경이 가능합니다! 물론 위에서 말씀 드린 방법을 사용하실 수 있구요~

  • 멀티 커서 안드로이드 스튜디오(다른 IDEA기반 IDE들도)의 주목할만한 특징은 멀티 커서 입니다. 아래 동영상처럼 멀티 커서를 사용해서 한번에 입력하거나 또는 일반 caret에서 할 수 있는 모든 것들을 사용하실 수 있습니다.
  • 라이브 템플릿 약어 몇 글자를 치고, 엔터를 누르면 마법처럼 전체 코드 구조가 생성되는 라이브 템플릿을 사용해보세요! Preference - Editor - LiveTemplate 탭을 살펴보세요.
  • Postfix operation 하이라이팅이나 리팩토링 퀵 리스트없이도 리팩토링을 할 수 있습니다! 단지 .을 누르고 자동완성되는 리스트에서 원하는 조작을 선택하시면 됩니다.
  • 클립보드 버퍼 안드로이드 스튜디오는 여러분의 모든 copy & paste를 기억합니다. shift + Cmd + V를 사용하면 Preference의 저장된 history개수(기본 5개)만큼의 내용을 보실 수 있습니다.

  • 스크래치 버퍼 코드에 붙여넣기 전에 외부 텍스트 편집기를 열고 코드를 편집을 한 후 다시 붙여넣기를 하셨던 분들은 이제부터 스크래치 버퍼를 사용해보세요! Find command by name 다이얼로그에서 쉽게 이 버버를 만들 수 있고 또 버퍼를 닫아도 최근 편집한 파일에서 다시 열 수 있습니다.

  • 언어 주입(injection) 정규표현식 뿐만 아니라 JSON, SQL같은 언어도 쉽게 입력하실 수 있습니다!
  • Groovy 콘솔 코드 스닙펫이 기대처럼 작동하는지 확인하기 위해 실행해볼 때는 전체 프로젝트를 빌딩할 필요없이 Find Action에서 Groovy Console을 검색하세요!

  • 로그캣 기본적으로 에러를 제외한 다른 레벨의 메시지는 흰 글씨로 나타나는데요, 다른 안드로이드 스튜디오의 설정과 마찬가지로 아웃풋 레벨에 따라 다른 글씨 색을 설정할 수 있습니다! 더 보기 편하게 변경해서 사용해보세요.

참고로 Mac OS X사용자분들께 도움이 될만한 추가 정보로, 안드로이드 스튜디오에서 다른 자바 버전을 사용할 수 있습니다. Java 6에서 폰트에 안티에일리어싱이 적용되지만 Java 7+에서는 그렇지 않죠, 또 Java 6으로는 secured updates가 안된다는 점도 주의하세요! 상황에 따라 아래와 같이 STUDIO_JDK환경변수에 JRE버전을 명시하시면 됩니다.

$ export STUDIO_JDK=/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk
$ open /Applications/Android\ Studio.app

그 외에도 다양한 링크를 제시하고 있으니 테스트 포함 더 많은 꿀팁이 필요하실 분들은 원문을 참고해주세요:)

오픈소스 라이브러리

  • RxGroups RxGroups는 RxJava Observable들을 안드로이드 생명주기와 함께 묶어주는 라이브러리로 특히 Retrofit과 함께 사용하면 좋습니다.

뉴스

더 읽을 거리

6월 넷째 주의 기사를 Android Weekly 210 영어 원문에서 볼 수 있습니다.

지난 뉴스가 궁금하다면 아래 링크를 참고해 주세요.

컨텐츠에 대하여

이 컨텐츠는 저자의 허가 하에 이곳에서 공유합니다.


Realm Korea

Realm Korea Team

4 design patterns for a RESTless mobile integration »

close