1

一般的な質問ですが、分かりやすいように例を挙げて質問します。

シナリオ:

  1. サポート ライブラリ 7 を使用し、アクション バー機能を使用しています。ユーザーが Android 2.2 (API 8) を搭載したデバイスにアプリをインストールしています。
  2. サポート ライブラリ 7 を使用し、アクション バー機能を使用しています。ユーザーが Android 4.3 (API 18) を搭載したデバイスにアプリをインストールしています。

実行時にシナリオ 1 がサポートされているライブラリのコードを実行することは明らかです。しかし、シナリオ 2 ではどうなるでしょうか。OSコードまたはサポートライブラリコードを実行しますか。

OSコードが実行されることを本当に願っています。

編集
Javaの仕組みは、ビルド時に決定された完全修飾名によってメソッドが解決されることです(@adelphusが書いたように)。したがって、サポート ライブラリ コードが実行されます。しかし、サポート ライブラリを実装するのが私だったら、次のようにしていました。

  1. 実行時に OS のバージョンを確認する
  2. OS に現在のオブジェクト/メソッドがある場合は、OS の実装を呼び出します (実際、この場合、サポート ライブラリは OS 機能のラッパーにすぎません)。
  3. これが古いOSの場合、自分で動作を実装する必要があります

それで、それはラッパーとして新しいバージョンで動作しますか、それとも内部実装を使用して両方のケースで動作しますか?

ありがとう

4

1 に答える 1

1

サポート ライブラリを実行します。

Java (および Android アプリ) の仕組みは、ビルド時に決定された完全修飾名によってメソッドが解決されることです。サポート ライブラリに対してアプリをビルドしたので、それが実行されている Android のバージョンに関係なく、それが呼び出されます。

実際には、エンド ユーザーに違いはありません。サポート ライブラリのポイントは、新しいバージョンの機能を持たない古いバージョンの Android に対して同じ動作を提供することです。最終結果が同じであるのに、サポート ライブラリを呼び出しているかどうかを気にする必要はありません。

于 2013-10-25T13:05:53.143 に答える