2

下位互換性が実装されていることを前提として、最小限の SDK がアプリケーションの実行に最低限必要な OS レベルを定義し、ターゲット SDK が機能を使用した最も高い API バージョンをデバイスに通知することを理解しています。

しかし、それは私が理解していないことです。まったく新しい API 機能の下位互換性をどのように実装しますか?

例えば:

現在のアプリの開発中に、Notification.Builder ではなく、古い通知システムを使用しています。Notification.Builder の使用を選択した場合、OS またはコンパイラはこれを、これが導入された以前のプラットフォーム用の互換性のあるコードに自動的に置き換えますか? または、OS のバージョンを確認して、別のコードを作成する必要がありますか?

4

2 に答える 2

3

たとえば、次を使用して、新しいメソッドを自分で説明する必要があります。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
    // Use methods introduced in API 11. (i.e. Notification.Builder)
} else {
    // Use old methods to ensure backwards compatibility.
}

これらのチェックを配置するのに適した場所は、ユーティリティ クラス (つまりCompatUtils.java) です。たとえば、Context引数を取り、 new を返す静的メソッドを作成できNotificationます。

public static buildNotification(Context ctx) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        // Create and return the Notification using Notification.Builder
    } else {
        // Create and return the Notification using pre-HoneyComb methods
    }
}

次にCompatUtils.buildNotification(this)、あなたの中で呼び出しActivityて、新しい を作成しますNotification。この種の詳細を抽象化すると、Activity簡潔さが保たれ、後で必要になった場合に簡単に変更できます。

もちろん、古いメソッドを使用して を作成する方がよい考えかもしれません。Notificationいずれにせよそれらを実装する必要があり、Notification.Builderはほとんど便宜上のものだからです。とはいえ、後で同様の問題が発生した場合に備えて、これは心に留めておくべきことです。


編集:

Notification.BuilderもAndroidサポートパッケージで提供されているので、この場合はそれをそのまま使用すればよいのですが、互換パッケージで提供されていないメソッドについては、上記のデザインパターンを使用する必要があります。

于 2012-08-01T21:55:41.693 に答える
1

Google には独自の互換性パッケージ (サポート ライブラリ内) があり、他のサードパーティ ソリューション (actionBarSherlock など) もあります。Lint ツールは、動作しない新機能を使用しようとしているときに通知できます。設定した API 範囲。

API を確認する 1 つの方法は、 android.os.Build.VERSION.SDK_INT を使用することです。別の方法は、リフレクションを使用することです。これは、Google が使用することがあります (理由はわかりません)。

いずれにせよ、出力 APK の最適化を改善するために、Google はビデオで targetSdk を常に最高のものに設定することを提案しています。

于 2012-08-01T22:19:33.563 に答える