프로그램/Java - Android / / 2017. 4. 3. 14:01

Android O 기능 및 API

반응형



원본글 :

https://developer.android.com/preview/api-overview.html#ai

Android O 기능 및 API

Android O에는 사용자와 개발자를 위한 새로운 다양한 기능이 도입되었습니다. 이 문서에서는 개발자를 위한 새로운 기능을 소개합니다.

Android O 동작 변경 사항에서 플랫폼 변경이 앱에 영향을 줄 수 있는 분야에 대해 알아보세요.

알림


Android O에서는 알림 동작과 설정을 더욱 간편하고 일관적으로 관리할 수 있도록 알림을 재구성했습니다. 변경 사항은 다음과 같습니다.

  • 알림 채널: Android O에서는 알림 채널이 도입됩니다. 알림 채널은 개발자가 표시하고자 하는 각 유형의 알림에 대해 사용자 맞춤형 채널을 생성합니다. 사용자 인터페이스에서는 알림 채널을 알림 범주라고 부릅니다. 알림을 구현하는 자세한 방법은 알림 채널 가이드를 참조하세요.
  • 다시 알림: 사용자가 알림이 나중에 나타나도록 다시 알림을 설정할 수 있습니다. 알림이 다시 표시될 때는 처음과 같은 중요도로 표시됩니다. 앱은 다시 알림으로 설정된 알림을 제거하거나 업데이트할 수 있지만, 다시 알림으로 설정된 알림은 업데이트하면 다시 표시되지 않습니다.
  • 알림 제한 시간: 이제 알림을 생성할 때 Notification.Builder.setTimeout()을 사용하여 제한 시간을 설정할 수 있습니다. 이 메서드를 사용하여 일정 시간이 지나면 알림을 취소하도록 지정할 수 있습니다. 필요한 경우, 지정된 제한 시간이 지나기 전에 알림을 취소할 수 있습니다.
  • 알림 닫기: 이제 시스템에서 사용자가 알림을 닫았는지 앱이 알림을 제거했는지 구분할 수 있습니다. 알림이 어떻게 닫혔는지 확인하려면 NotificationListenerService 클래스의 새 onNotificationRemoved()메서드를 구현해야 합니다.
  • 배경 색상: 알림의 배경 색상을 설정하고 활성화할 수 있습니다. 사용자가 한 눈에 볼 수 있도록 중요한 작업에 대한 알림에만 이 기능을 사용해야 합니다. 예를 들어, 운전 중 길찾기 또는 진행 중인 통화와 관련된 알림에 대해 배경 색상을 설정할 수 있습니다. Notification.Builder.setColor()를 사용하여 원하는 배경 색상을 설정할 수도 있습니다. 이때 Notification.Builder.setColorized()를 사용하면 알림에 배경 색상을 사용하는 기능을 활성화할 수 있습니다.
  • 메시징 스타일: 이제 MessagingStyle 클래스를 사용하는 알림이 접힌 형식으로 더 많은 내용을 표시합니다. 메시지와 관련된 알림에는 MessagingStyle 클래스를 사용해야 합니다. 또한 새 addHistoricMessage()메서드를 사용하여 메시징 관련 알림에 기록 메시지를 추가함으로써 대화에 맥락을 제공할 수 있습니다.
Android O의 알림.
Android O의 알림에 사용되는 인라인 컨트롤.

그림 1. 오른쪽 화면은 Android O의 알림에 사용되는 인라인 컨트롤을 나타냅니다.

Autofill Framework


계정 생성, 로그인 및 신용카드 트랜잭션은 시간이 걸리고 오류가 발생하기 쉽습니다. 사용자는 이런 반복적 작업을 요구하는 앱에 쉽게 불만을 느낄 수 있습니다.

Android O는 Autofill Framework를 도입하여 로그인 및 신용카드 양식 등과 같은 양식을 더 쉽게 작성할 수 있도록 지원합니다. 사용자가 Autofill에 옵트인하면 기존 앱과 새로운 앱에서 Autofill Framework를 사용할 수 있습니다.

앱에서 프레임워크를 사용하는 방식을 최적화하기 위해 몇 가지 단계를 취할 수 있습니다. 자세한 정보는 Autofill Framework 개요를 참조하세요.

PIP 모드


Android O에서는 PIP(picture-in-picture) 모드로 액티비티를 시작할 수 있습니다. PIP는 주로 동영상 재생에 사용되는 특수한 유형의 다중 창 모드입니다. PIP 모드는 이미 Android TV에서 제공되고 있으며 Android O는 다른 Android 기기에서 이 기능을 제공합니다.

액티비티가 PIP 모드일 때는 일시 정지 상태이지만 계속 콘텐츠를 표시해야 합니다. 따라서 앱이 onPause() 핸들러에서 재생을 일시 중지하지 않도록 해야 합니다. 대신 onStop()에서 동영상을 일시 중지했다가 onStart()에서 계속 재생해야 합니다. 자세한 정보는 다중 창 수명 주기를 참조하세요.

액티비티가 PIP 모드를 사용할 수 있도록 지정하려면 매니페스트에서 android:supportsPictureInPicture를 true로 설정합니다. (Android O부터는 PIP 모드를 지원하려는 경우 Android TV나 다른 Android 기기에서 android:resizeableActivity를 true로 설정할 필요가 없습니다. 액티비티가 다른 다중 창 모드를 지원할 때만 android:resizeableActivity를 설정하면 됩니다.)

API 변경 사항

Android O에는 PictureInPictureArgs라는 새로운 객체가 도입됩니다. 이 객체를 PIP 메서드에 전달하여 PIP 모드일 때 액티비티의 동작 방법을 지정할 수 있습니다. 이 객체는 액티비티의 기본 가로세로 비율 등과 같은 속성을 지정합니다.

PIP 추가에서 설명한 기존 PIP 모드를 이제 Android TV뿐만 아니라 모든 Android 기기에서 사용할 수 있습니다. 또한, Android O는 PIP 모드를 지원하기 위해 다음 메서드를 제공합니다.

  • Activity.enterPictureInPictureMode(PictureInPictureArgs args): PIP 모드에서 액티비티 위치를 지정합니다. 액티비티의 가로세로 비율 및 기타 구성 설정은 args를 통해 지정됩니다. args에서 어떤 필드가 비어 있을 경우, 시스템은 마지막으로 Activity.setPictureInPictureArgs()를 호출했을 때 설정된 값을 사용합니다.

    지정된 액티비티는 화면 모서리에 배치되고 나머지 화면은 화면에 있던 이전 액티비티로 채워집니다. PIP 모드로 진입하는 액티비티는 일시 중지 상태가 되지만 시작된 상태로 유지됩니다. 사용자가 PIP 액티비티를 탭하면 시스템은 사용자가 상호작용하도록 메뉴를 표시합니다. PIP 상태일 때는 터치 이벤트가 액티비티에 도달하지 않습니다.

  • Activity.setPictureInPictureArgs() 액티비티의 PIP 구성 설정을 업데이트합니다. 액티비티가 현재 PIP 모드에 있으면 설정이 업데이트됩니다. 이는 액티비티의 가로세로 비율이 변경될 때 유용합니다. 액티비티가 PIP 모드가 아닐 때는 호출한 enterPictureInPictureMode() 메서드와 관계없이 이 구성 설정이 사용됩니다.

글꼴 작업


Android O는 글꼴을 리소스로 사용할 수 있는 Fonts in XML이라는 새로운 기능을 도입합니다. 즉, 글꼴을 자산으로 번들할 필요가 없습니다. 글꼴은 R 파일로 컴파일되고 시스템에서 자동으로 리소스로 사용할 수 있습니다. 그런 다음 새로운 리소스 유형인 font의 도움을 통해 해당 글꼴에 액세스할 수 있습니다. 또한 Android O는 시스템 글꼴과 관련된 정보를 검색하고 파일 설명자를 제공하는 메커니즘도 제공합니다. 글꼴을 리소스로 사용하고 시스템 글꼴을 검색하는 방법에 대한 자세한 정보는 글꼴 작업을 참조하세요.

어댑티브 아이콘


Android O에는 어댑티브 런처 아이콘이 도입됩니다. 어댑티브 아이콘은 시각적 효과를 지원하며, 다른 기기 모델에서 다양한 모양을 표시할 수 있습니다. 어댑티브 아이콘을 만드는 방법에 대해 알아보려면 어댑티브 아이콘 미리보기 기능 가이드를 참조하세요.

색상 관리


이제 이미징 앱을 개발하는 Android 개발자가 폭넓은 색상 범위를 표시할 수 있는 새로운 기기를 이용할 수 있습니다. 폭넓은 색상 범위의 이미지를 표시하려면 앱이 자체 매니페스트에서 플래그를 활성화해야 하며(각 액티비티마다), 폭넓은 색상 프로필(AdobeRGB, Pro Photo RGB, DCI-P3 등)을 포함한 비트맵을 로드해야 합니다.

Wi-Fi Aware


Android O에서는 Wi-Fi Aware 지원이 추가되며 이 기능은 NAN(Neighbor Awareness Networking) 사양을 기반으로 합니다. 적절한 Wi-Fi Aware 하드웨어가 기기에 있다면, 앱과 인접 기기들이 인터넷 액세스 지점 없이도 Wi-Fi를 통해 검색과 통신을 수행할 수 있습니다. 저희는 하드웨어 파트너들과의 협력을 통해 최대한 신속하게 Wi-Fi Aware 기술을 기기에 제공할 것입니다. Wi-Fi Aware를 앱에 통합하는 방법에 대한 자세한 정보는 Wi-Fi Aware를 참조하세요.

부속 기기 페어링


Android O는 블루투스, BLE, Wi-Fi를 통해 부속 기기와 페어링을 시도할 때 페어링 요청 대화상자를 맞춤설정할 수 있는 API를 제공합니다. 자세한 정보는 부속 기기 페어링을 참조하세요.

Android에서 블루투스 사용에 대한 자세한 정보는 블루투스 가이드를 참조하세요. Android O에만 해당하는 블루투스 변경 사항에 대해서는 Android O 동작 변경 사항 페이지의 블루투스 섹션을 참조하세요.

WebView API


Android O에서는 웹 콘텐츠를 앱에 표시하는 WebView 객체를 관리할 수 있는 여러 API를 제공합니다. 이러한 API는 앱의 안정성과 보안을 개선해 주며 다음과 같은 API가 포함됩니다.

  • Version API
  • Google SafeBrowsing API
  • Termination Handle API
  • Renderer Importance API

이러한 API에 대해 자세히 알아보려면 WebViews 관리를 참조하세요.

단축키 및 위젯 고정


Android O는 단축키와 위젯의 인앱 고정 기능을 제공합니다. 앱에서 사용자 권한에 따라 이러한 지원되는 런처에 대해 고정된 단축키와 위젯을 생성할 수 있습니다.

자세한 정보는 단축키 및 위젯 고정 미리보기 기능 가이드를 참조하세요.

접근성


Android O에서는 자체적인 접근성 서비스를 원하는 개발자를 위해 다음과 같은 접근성 기능을 지원합니다.

언어 감지
TTS(Text-To-Speech) 도구가 텍스트 범위에서 식별한 언어를 식별하려면 detectLanguages()를 사용하세요. 이 메서드는 Android O에 도입된 TextClassificationManager 클래스에 나타납니다. TextLanguage 객체의 결과 목록을 사용하면 텍스트의 어느 영역이 특정 언어에 할당되었는지는 물론 TTS가 특정 텍스트의 하위 집합에 얼마나 확실히 언어를 할당했는지 식별할 수 있습니다.
접근성 버튼

여러분의 서비스에서 android:accessibilityFlags 특성 내에 FLAG_REQUEST_ACCESSIBILITY_BUTTON 플래그를 설정하여 접근성 버튼이 시스템 탐색 영역 내에 나타나도록 요청할 수 있습니다. 이 버튼을 사용하면 사용자가 기기의 어느 위치에서나 서비스의 기능을 신속하게 활성화할 수 있습니다. 여러분의 서비스에서 registerAccessibilityButtonCallback()을 사용하여 버튼 상호작용 콜백을 등록할 수 있습니다.

참고: 이 기능은 소프트웨어 렌더링 탐색 영역을 제공하는 기기에서만 사용이 가능합니다. 접근성 버튼의 가용성을 추적하려면 isAccessibilityButtonAvailable() 메서드와 onAvailabilityChanged() 콜백을 사용하세요. 접근성 버튼을 사용할 수 없는 경우 관련 기능에 접근할 수 있는 대체 수단을 서비스 사용자들에게 제공하세요.

지문 동작

접근성 서비스는 또한 기기의 지문 센서와 함께 대체 입력 메커니즘인 방향 스와이프(위, 아래, 왼쪽, 오른쪽)에 반응할 수도 있습니다. 이러한 상호작용에 대한 콜백을 수신하려면 아래의 단계를 순서대로 완료하세요.

  1. USE_FINGERPRINT 권한과 CAPABILITY_CAN_CAPTURE_FINGERPRINT_GESTURES 기능을 선언합니다.
  2. android:accessibilityFlags 특성 내에 FLAG_CAPTURE_FINGERPRINT_GESTURES 플래그를 설정합니다.
  3. registerFingerprintGestureCallback()을 사용하여 콜백을 등록합니다.

모든 기기에 지문 센서가 포함된 것은 아님을 명심하세요. 기기가 센서를 지원하는지 여부를 알려면 isHardwareDetected() 메서드를 사용하세요. 지문 센서가 포함된 기기라도, 인증 용도로 사용 중이 아닐 때만 서비스에서 이 센서를 사용할 수 있습니다. 센서의 가용 시기를 알려면 isGestureDetectionAvailable() 메서드를 호출하고 onGestureDetectionAvailabilityChanged() 콜백을 구현하세요.

단어 수준 강조표시

TextView 객체에서 보이는 문자의 위치를 판별하기 위해, EXTRA_DATA_TEXT_CHARACTER_LOCATION_KEY를 첫 번째 인수로 refreshWithExtraData()에 전달할 수 있습니다. Bundle 객체는 두 번째 인수로 refreshWithExtraData()에 제공되며, 이 객체를 업데이트하여 Rect 객체의 parcelable 배열을 포함시킬 수 있습니다. 각 Rect 객체는 특정 문자의 경계 상자를 나타냅니다.

화면상에 나타나는 콘텐츠를 구술하기 위해 서비스가 TextToSpeech 객체를 사용하면, 합성된 개별 단어를 TTS(텍스트 음성 변환) 엔진이 말하기 시작하는 타이밍에 대한 더욱 정밀한 정보를 얻을 수 있습니다. 이 엔진이 특정 텍스트 범위에 대한 오디오를 재생하기 시작하면, 텍스트 음성 변환 API는 onUtteranceRangeStart() 콜백을 사용하여 해당 텍스트 범위의 음성 재생이 시작됨을 여러분의 서비스에게 알려줍니다.

자체 TextToSpeechService 구현을 만드는 경우, rangeStart() 메서드를 사용하여 이 새로운 기능을 지원할 수 있습니다.

힌트 텍스트
AccessibilityNodeInfo 클래스 내에서 getHintText() 메서드를 사용하여 여러분의 서비스에서 EditText 객체의 힌트 텍스트에 액세스할 수 있습니다. 특정 EditText 객체가 현재 힌트 텍스트를 표시하지 않더라도, getHintText() 메서드가 여전히 힌트 텍스트를 서비스에게 제공합니다.
연속 동작 디스패치
이제 GestureDescription.StrokeDescription 생성자에서 최종 인수인 isContinued를 사용하여 여러분의 서비스에서 동일 프로그래밍 동작에 속하는 일련의 스트로크를 지정할 수 있습니다.

앱의 접근성을 더 높이는 방법에 대해 알아보려면 접근성을 참조하세요.

권한


Android O에서는 새로운 권한인 android.permission.ANSWER_PHONE_CALLS를 도입합니다. 이 권한을 사용하면 프로그래밍 방식으로 걸려오는 전화를 받을 수 있습니다. 이 권한은 위험으로 분류되며 PHONE 권한 그룹의 일부분입니다.

TelecomManager 클래스에서 acceptRingingCall() 메서드를 사용하여 걸려오는 전화를 앱에서 처리할 수 있습니다.

콘텐츠 제공자 페이징


한 번에 한 페이지에 대량의 데이터 집합을 로드하는 기능을 지원하도록 콘텐츠 제공자를 업데이트했습니다. 예를 들어, 수천 개의 이미지가 포함된 사진 앱은 데이터의 하위 집합을 쿼리하여 페이지에 표시할 수 있습니다. 콘텐츠 제공자가 반환한 각 결과 페이지는 단일 Cursor 객체로 표시됩니다. 페이징 기능을 사용하려면 클라이언트와 제공자가 모두 이 기능을 구현해야 합니다.

콘텐츠 제공자의 변경 사항에 대한 자세한 정보는 ContentProvider 및 ContentProviderClient를 참조하세요.

미디어 개선


미디어 지표

새로운 getMetrics() 메서드는 특성과 값의 맵으로 표시되는 구성 및 성능 정보를 포함한 Bundle 객체를 반환합니다. getMetrics() 메서드는 다음과 같은 미디어 클래스에 대해 정의됩니다.

지표는 각 인스턴스에 대해 개별적으로 수집되며 인스턴스 수명 동안 지속됩니다. 사용할 수 있는 지표가 없으면 메서드는 null을 반환합니다. 반환되는 실제 지표는 클래스에 따라 달라집니다.

MediaPlayer

Android O에서는 MediaPlayer 클래스에 여러 새로운 메서드를 추가합니다. 이들 메서드는 앱의 미디어 재생 처리를 여러 가지 방식으로 개선할 수 있습니다.

MediaRecorder

  • 이제 MediaRecorder는 스트리밍에 유용한 MPEG2_TS 형식을 지원합니다.
    mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_2_TS);

    MediaRecorder.OutputFormat를 참조하세요.

  • 이제 MediaMuxer는 개수에 제한없이 오디오와 동영상 스트림을 처리할 수 있습니다. 더 이상 하나의 오디오 트랙이나 하나의 동영상 트랙으로 제한되지 않습니다. addTrack()을 사용하여 원하는 갯수만큼 트랙을 믹싱하세요.
  • 또한 MediaMuxer는 사용자가 정의한 프레임당 정보를 포함하는 하나 이상의 메타데이터 트랙을 추가할 수 있습니다. 메타데이터의 형식은 애플리케이션에 의해 정의됩니다. 메타데이터 트랙은 MP4 컨테이너에만 지원됩니다.

메타데이터는 오프라인 처리에 유용할 수 있습니다. 예를 들어, 센서의 자이로 신호는 동영상을 안정화하는 데 사용될 수 있습니다.

메타데이터 트랙을 추가할 때 트랙의 mime 형식은 "application/" 접두사로 시작해야 합니다. 메타데이터 쓰기는 동영상/오디오 데이터 쓰기와 동일하며, 단 데이터가 MediaCodec으로부터 오지는 않습니다. 그 대신, 앱은 연관된 타임스탬프가 있는 ByteBuffer를 writeSampleData() 메서드에 전달합니다. 타임스탬프는 동영상 및 오디오 트랙과 시간 베이스가 동일해야 합니다.

생성된 MP4 파일은 메타데이터의 mime 형식 시그널링을 위해 ISOBMFF의 섹션 12.3.3.2에 정의된 TextMetaDataSampleEntry를 사용합니다. 메타데이터 트랙이 있는 파일을 추출할 때 MediaExtractor를 사용할 경우, 이 메타데이터의 mime 형식은 MediaFormat으로 추출됩니다.

다중 디스플레이 지원


Android O부터는 플랫폼에서 다중 디스플레이 지원이 강화됩니다. 액티비티가 다중 창 모드를 지원하고 다중 디스플레이 기기에서 실행될 경우, 사용자가 다른 디스플레이로 액티비티를 옮길 수 있습니다. 앱이 액티비티를 시작할 때 해당 액티비티를 실행할 디스플레이를 지정할 수 있습니다.

참고: 액티비티가 다중 창 모드를 지원하면 Android O는 해당 액티비티에 대해 다중 디스플레이 지원을 자동으로 활성화합니다. 앱을 테스트하여 다중 디스플레이 환경에서 적절히 작동하는지 확인해야 합니다.

앱에 다중 디스플레이가 있더라도 다시 실행되는 상태에서는 한 번에 한 액티비티만 실행할 수 있습니다. 포커스가 있는 액티비티가 다시 시작된 상태가 되고, 다른 모든 보이는 액티비티가 일시 정지되지만 중단되지는 않습니다. 여러 액티비티가 보이는 경우 액티비티 수명 주기에 대한 자세한 정보는 다중 창 수명 주기를 참조하세요.

사용자가 다른 디스플레이로 액티비티를 옮기면 시스템이 액티비티 크기를 조정하고 필요에 따라 런타임 변경을 수행합니다. 액티비티 스스로 구성 변경을 처리하거나, 시스템이 액티비티가 포함된 프로세스를 소멸시키고 새 크기로 액티비티를 다시 생성하게 할 수 있습니다. 자세한 정보는 구성 변경 사항 처리를 참조하세요.

API 변경 사항

ActivityOptions는 다중 디스플레이를 지원하는 두 개의 새로운 메서드를 제공합니다.

setLaunchDisplayId()
액티비티가 시작되면 어느 디스플레이가 액티비티를 표시해야 하는지 지정합니다.
getLaunchDisplayId()
액티비티의 현재 실행 디스플레이를 반환합니다.

도구 업데이트

adb 셸이 다중 디스플레이를 지원하도록 확장되었습니다. 셸 start 명령을 사용하여 액티비티를 시작하고 액티비티의 대상 디스플레이를 지정할 수 있습니다.

adb shell start <activity_name> --display <display_id>

새로운 Account Access 및 Discovery API


Android O에서는 앱이 사용자 계정에 액세스하는 방식을 여러 가지로 개선합니다. 인증자는 자신이 관리하는 계정을 어떤 앱에는 숨기고 어떤 앱에는 표시할지 여부를 결정하기 위해 고유한 정책을 사용할 수 있습니다. Android 시스템은 어떤 애플리케이션이 특정 계정에 액세스할 수 있는지를 추적합니다.

이전의 Android 버전에서 사용자 계정 목록을 추적하려는 앱은 관련 없는 유형의 계정을 포함하여 모든 계정을 업데이트해야 했습니다. Android O에서 addOnAccountsUpdatedListener(android.accounts.OnAccountsUpdateListener, android.os.Handler, boolean, java.lang.String[]) 메서드가 추가되었습니다. 이 메서드를 사용하는 앱은 계정 변경 사항을 수신해야 하는 계정 유형 목록을 지정할 수 있습니다.

API 변경 사항

AccountManager는 인증자가 계정을 볼 수 있는 앱을 관리하도록 도와주는 6개의 새로운 메서드를 제공합니다.

Android O는 setAccountVisibility(android.accounts.Account, java.lang.String, int) 메서드를 사용하여 설정되지 않았던 애플리케이션의 가시성 수준을 지정하기 위해 2개의 특수 Package Name 값을 도입합니다. PACKAGE_NAME_KEY_LEGACY_VISIBLE 가시성 값은 GET_ACCOUNTS 권한을 가진 앱, Android O보다 낮은 Android 버전을 대상으로 하는 앱, 또는 임의의 Android 버전을 대상으로 하는 인증자와 서명이 일치하는 앱에 적용됩니다. PACKAGE_NAME_KEY_LEGACY_NOT_VISIBLE은 이전에 설정되지 않은 앱에 대해 그리고 PACKAGE_NAME_KEY_LEGACY_VISIBLE이 적용되지 않는 앱에 대해 기본 가시성 값을 제공합니다.

새로운 Account Access 및 Discovery API에 대한 자세한 정보는 AccountManager 및 OnAccountsUpdateListener를 참조하세요.

AnimatorSet


Android O부터는 AnimatorSet API에서 탐색과 역방향 재생을 지원합니다. 탐색을 통해 애니메이션 세트의 위치를 특정 시점으로 설정할 수 있습니다. 앱에 실행 취소할 수 있는 애니메이션이 포함된 경우 역방향 재생이 유용합니다. 2개의 애니메이션 세트를 별도로 정의하는 대신 같은 애니메이션을 역방향으로 재생할 수 있습니다.

TextView 자동 크기 조절


Android O에서는 TextView 크기에 따라 텍스트의 크기를 자동으로 늘리거나 줄일 수 있습니다. 다시 말해, 다양한 화면에서 또는 동적 콘텐츠로 텍스트 크기를 더 쉽게 최적화할 수 있습니다. Android O의 TextView 자동 크기 조절에 대한 자세한 정보는 TextView 자동 크기 조절을 참조하세요.

앱 범주


Android O에서는 관련된 적절한 범주를 각 앱이 선언할 수 있습니다. 이들 범주는 용도나 기능이 유사한 앱을 모아서 사용자에게 표시할 때 사용됩니다(예: 데이터 사용량, 배터리 사용량 또는 저장소 사용량). 앱의 범주를 정의하기 위해 android:appCategory 특성을 <application> 매니페스트 태그에 설정할 수 있습니다.

새로운 StrictMode 탐지기


Android O에서는 앱의 잠재적 버그를 찾도록 도와주는 세 개의 새로운 StrictMode 탐지기를 추가합니다.

  • detectUnbufferedIo()는 앱이 버퍼링없이 데이터를 읽거나 쓰는 경우 이를 탐지하며, 성능에 상당한 영향을 미칩니다.
  • detectContentUriWithoutPermission()은 앱 외부에서 액티비티를 시작할 때 이 앱이 실수로 또 다른 앱에 권한을 부여하는 것을 잊어버린 경우 이를 탐지합니다.
  • detectUntaggedSockets()은 앱이 디버깅 용도로 setThreadStatsTag(int)를 사용하지 않고 네트워크 트래픽을 수행하는 경우 이를 탐지합니다.

캐시된 데이터


Android O는 캐시된 데이터에 대한 더 나은 지침과 동작을 제공합니다. 이제 각 앱에는 캐시된 데이터를 위한 디스크 공간 할당량이 부여됩니다. 이 할당량은 getCacheQuotaBytes(File)에 의해 반환됩니다.

시스템이 디스크 공간을 늘려야 하는 경우, 지정된 할당량을 초과하는 캐시 파일을 앱에서 먼저 삭제합니다. 따라서 지정된 할당량 아래로 캐시된 데이터를 유지한다면, 필요한 경우 해당 캐시 파일이 시스템에서 마지막으로 지워집니다. 앱에서 어떤 캐시 파일을 삭제할지 결정할 때 시스템은 가장 오래된 파일을 먼저 삭제할 것을 고려합니다(수정된 시간으로 판별).

또한 시스템이 캐시된 데이터를 비우는 방식을 디렉토리별로 제어할 수 있는 두 가지 새로운 동작이 있습니다.

마지막으로, 대용량 파일에 디스크 공간을 할당할 경우, 새로운 allocateBytes(File, long, int) API 사용을 고려하세요. 이 API는 여러분의 요청을 충족시키기 위해 (필요에 따라) 다른 앱에 속하는 캐시 파일을 자동으로 지웁니다. 새로운 데이터를 저장할 기기의 디스크 공간이 충분한지 여부를 결정할 때, getUsableSpace()를 사용하는 대신 getAllocatableBytes(File, int)를 호출하세요. 왜냐하면 이 메서드는 시스템이 자동으로 지우는 모든 캐시된 데이터를 고려하기 때문입니다.

개선된 미디어 파일 액세스


저장소 액세스 프레임워크(SAF)를 사용하면 앱이 사용자설정 DocumentsProvider를 노출하여 다른 앱에 데이터 소스의 파일에 대한 액세스를 제공할 수 있습니다. 실제로, 문서 제공자는 네트워크 저장소에 있는 파일이나 MTP(Media Transfer Protocol)같은 프로토콜을 사용하는 파일에 대한 액세스도 제공할 수 있습니다.

그러나 대용량 미디어 파일을 원격 데이터 소스에서 액세스하는 경우 약간의 문제가 발생합니다. 미디어 플레이어는 문서 제공자의 파일에 대해 검색 가능한 액세스를 요구합니다. 대용량 미디어 파일이 원격 데이터 소스에 있는 경우, 문서 제공자는 모든 데이터를 미리 가져와서 스냅샷 파일 설명자를 생성해야 합니다. 미디어 플레이어는 파일 설명자가 없는 파일은 재생할 수 없으므로, 문서 제공자가 파일 다운로드를 마칠 때까지는 재생을 시작할 수 없습니다.

Android O부터는, 저장소 액세스 프레임워크(SAF)를 통해 사용자설정 문서 제공자가 원격 데이터 소스의 파일에 대해 검색 가능한 파일 설명자를 생성할 수 있습니다. SAF는 파일을 열어 기본 검색 가능한 파일 설명자를 가져올 수 있습니다. 그런 다음 불연속적인 바이트 요청을 문서 제공자에게 전달합니다. 이 기능을 통해 문서 제공자는 전체 파일을 미리 캐싱하는 대신 미디어 플레이어 앱이 요청했던 정확한 바이트 범위를 반환할 수 있습니다.

이 기능을 사용하려면 새로운 StorageManager.openProxyFileDescriptor() 메서드를 호출해야 합니다. openProxyFileDescriptor() 메서드는 ProxyFileDescriptorCallback 객체를 콜백으로 받습니다. SAF는 문서 제공자로부터 반환된 파일 설명자에 대해 클라이언트 애플리케이션이 파일 작업을 수행할 때마다 콜백을 호출합니다.

Android 엔터프라이즈


Android 엔터프라이즈에서는 Android O를 실행하는 기기를 위한 많은 새로운 기능과 API가 도입됩니다. 프로필 소유자 및 기기 소유자 관리 모드의 프로비저닝이 이전보다 더욱 강력하고 생산적이고 쉬워졌습니다. 또한 배포 시나리오가 완전히 새로워졌습니다.

주목할 만한 몇 가지 특징은 다음과 같습니다.

  • 회사 소유 기기에서 관리 프로필을 사용하는 기능.
  • 사용자 친화적인 설치 흐름을 제공하는 작업 프로필을 통해 설치 시간 대폭 단축.
  • 파일 기반 암호화를 위한 엔터프라이즈 관리.
  • 앱 관리 API의 위임.

Android O에서 Android 엔터프라이즈의 새로운 API와 기능에 대한 자세한 내용은 Android 엔터프라이즈 페이지를 참조하세요.

자바 프로그래밍 언어 업데이트


Android O에서는 OpenJDK 자바 언어 기능을 Android에 추가할 예정입니다. OpenJDK 8의 java.time은 물론 OpenJDK 7의 MethodHandle을 비롯한 java.nio.file 및 java.lang.invoke도 추가할 예정입니다. API 차이점 보고서에서 새로운 패키지를 확인하세요.


반응형

'프로그램 > Java - Android' 카테고리의 다른 글

Fragment LifeCycle  (0) 2017.04.13
Fragment 데이터 전달  (0) 2017.04.13
Android accessibility service Talkback Running Check  (0) 2014.12.04
android source download  (1) 2014.05.09
android emma 사용하기  (0) 2014.03.18
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유