これをコメントから移動して、将来この質問を検討している他の人にとってより明確にします。
Androidの新旧両方のバージョンをサポートする場合、新しいリリースごとにフレームワークで多くの変更が行われるにもかかわらず、アプリケーションの実行方法が混乱する可能性があるため、ここでこれを明確にしてみます。
1.5 SDK用に作成されたアプリケーションは、そのAPIレベルに存在する関数のみを呼び出すことができるため、たとえば、マルチタッチAPIは1.5には存在せず、存在しません。「わかりました。ただし、新しいAPIを呼び出す必要はありません。アプリを2.3で動作させ、a2sdをサポートしたいだけです」と言います。「OK、マニフェストでtargetApiを変更し、minSDKを設定してコンパイルします。 2.3に対して、あなたは行ってもいいです。」
なぜそれが機能するのですか?のonMeasure()メソッドListView
が2.2で変更され、onMeasure()内でbetterCalculateFunction()を呼び出す場合はどうなりますか?アプリがまだ機能するのはなぜですか?
これは、Javaでの遅延バインディングの利点です。ご覧のとおり、Javaはデバイスに到達して実行されるまでコンパイルされません。Eclipseで実行しているのは、後でデバイスによって解釈される一連のバイトコード命令を含むバイトコードに変換することです。ただし、バイトコードにbetterCalculateFunction()への参照が含まれることはありません(直接呼び出さない限り、onMeasure()の呼び出しは間接的です)。これは、コードがデバイスで実行されているときに、デバイスのAndroidフレームワークに対してリンクされ、コードがonMeasure()を直接呼び出すために発生する可能性があります。これは、外向きのパブリックAPIであるためです。実行パスはフレームワークに入り、必要なものをすべて呼び出します。実行が完了すると、コードに戻ります。
したがって、1.5では表示される可能性があります
doStuff(コード)-> onMeasure(パブリックAPI)->完了
および2.2
doStuff(コード)-> onMeasure(パブリックAPI)-> betterCalculateFunction(プライベート関数)->完了
APIレベルに応じて存在する場合と存在しない場合がある関数を呼び出す必要がある場合は、ここで私の関連する回答を確認することをお勧めします。stackoverflow:アプリを適切にダウングレードします
それがいくつかのことをクリアすることを願っています。