2011/12/07

アプリ起動の高速化:windowDisablePreview

スタイルの属性にwindowDisablePreviewというものがあります。

アプリを起動する際、アプリに黒系統のテーマ(Theme.Black, Theme.Holo)が適用されている場合は一瞬画面
が黒くなってからアプリが起動されます。
アプリに白系統のテーマ(Theme.Light, Theme.Holo.Light)が適用されている場合は一瞬画面が白くなってから
アプリが起動されます。

この現象は、アプリの起動パフォーマンスに問題を抱えていないアプリの場合確認が困難なぐらい一瞬です。
しかし、アプリの起動パフォーマンスに問題を抱えているアプリの場合は、ユーザがそれを認識(秒単位で)できる
ほどになります。

この画面が黒(あるいは白)くなる現象は、ユーザへのアプリ起動開始を通知する役目を担っています。
つまり、アプリの起動が非常に遅い(ランチャーアイコンをタップしても中々起動してこない)場合にユーザ
へのレスポンスタイムを縮める効果があります。

しかし、ユーザの操作なしにバックグラウンドから起動されるようなケースで、この効果を邪魔に感じる場合は
効果をOFFにすることが可能です。

下記のようにwindowDisablePreviewにtrueを設定したスタイルをactivityや
applicationに適用します。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="TestTheme"
            parent="@android:style/Theme.DeviceDefault">
        <item name="android:windowDisablePreview">true</item>
    </style>
</resources>

上記はメリットとデメリットを把握した上で使うのが重要です。
一見するとアプリのパフォーマンスが向上したように感じられますが、前述した通りレスポンスタイムは遅くなります。
windowDisablePreviewをtrueとすれば、ユーザはアプリが起動中であると認識できるタイミングは遅くなりますが、
アプリ起動中の黒(白)画面が表示されなくなるためユーザに起動中であることを気取られず高速起動したように見えます。

ランチャーアイコンから起動されるActivityには不向きと言えるでしょう。

以上です。