前人未踏の領域へ Androidアプリ開発編

Androidアプリ開発に関する調査メモ置き場。古い記事にはアプリ以外も含まれます。

KitKat4.4 API概要

API概要の一部を拙訳したものです。

http://developer.android.com/intl/ja/about/versions/android-4.4.html

重要な振る舞いの変更

外部ストレージ利用時

4.4から外部ストレージの共有ファイルを読むにはREAD_EXTERNAL_STRAGEが必要になります。getExternalStoragePublicDirectory()によって返されるファイルはもはやパーミッションなしにアクセスできません。
ただし、getExternalFilesDirによって供給されるアプリ固有のストレージだけへのアクセスであればREAD_EXTERNAL_STRAGEのパーミッションは不要です。

WebView利用時

Android4.4で実行している場合、特にtargetSdkVersionを"19" にした場合は動作が異なる可能性があります。

WebViewのクラスおよび関連するAPIの基礎となるコードは、Chromiumソースコードの最近のスナップショットに基づいてアップグレードされました。これは、パフォーマンスの様々な改善と、
新しいHTML5の機能のサポート、およびWebViewのコンテンツのリモートデバッグのサポートをもたらします。
このアップグレードの範囲は、あなたのアプリのWebViewを使用している場合、その動作はいくつかのケースでは影響を受ける可能性があることを意味します。
既知の動作の変更は文書化されおり、アプリに対するほとんどの影響はtargetSdkVersionを19以上にした場合だけですが、
新しいWebViewはターゲットAPIレベル18以下のアプリでは一部のレガシー機能を提供するために"互換モード"で動作します。
それはWebViewの以前のバージョンからの未知の行動に依存している可能性があります。

もしアプリがWebViewを利用しているならtargetSdkVersionを19にした場合に
どのような影響があるかについてできるだけ早くテストを行うことが重要です。

AlarmManager利用時

set()またはsetRepeating()を使って作ったアラームは不正確になります。電力効率を向上させるために、Androidは現在、
ある程度近い時間に発生するすべてのアプリの各アラームをまとめるため、システムはそれぞれのアラームを数回に分けて扱う代わりに一度だけデバイスを起動します。

もしアラームが正確なクロック時間には関連付けられていないものの、しかしそれがまだ特定の時間の範囲(午前2時から4時のような)に実行されることが重要な場合、
setWindow()メソッドを使うことができます。アラームの最も早い時間か、システムがアラームを起動するべき早い方の時間の枠のどちらかを受け入れます。

もし、アラームが必ず正確なクロック時間にピン付けされなければならない場合、(カレンダーイベントのリマインダーなど)、新たにsetExact()を利用できます。

この不正確なバッチによる振る舞いは実際アプリを更新した時にだけ反映されます。もしtargetSdkVersionが18以下の場合、アラームは以前のバージョンの振る舞いを維持します。

ContentResolverを使ってアプリのデータを同期している場合

addPeriodicSync()によるsyncの生成はデフォルトで指定した期間のおよそ4%ほど柔軟なインターバルで実行します。
たとえば、今のポーリング間隔が24時間の場合、同期処理が毎日正確に同じ時間に発生する代わりに、毎日約1時間の範囲内で発生する可能性があります。

同期処理のために自身の柔軟なインターバルを指定するには新しくrequestSync()メソッドを使いはじめる必要があります。詳細についてはSyncAdapterを参照して下さい。

このフレックスインターバルは更新されたアプリでのみ振る舞います。古いバージョンではこれまでの挙動を維持します。