0

前の質問を延長したいです。

私のコードに将来の API によって提供されるメソッドがある場合、バージョンを確認すると、LogCat に次の警告が表示されます

04-24 09:30:12.565: I/dalvikvm(471): Could not find method android.view.ViewTreeObserver.removeOnGlobalLayoutListener, referenced from method com.my.project.ActivityHome.removeLayoutListenerPost16
04-24 09:30:12.565: W/dalvikvm(471): VFY: unable to resolve virtual method 2950: Landroid/view/ViewTreeObserver;.removeOnGlobalLayoutListener (Landroid/view/ViewTreeObserver$OnGlobalLayoutListener;)V

私の場合(リンクされた質問を参照)、リフレクションを使用して解決できます

try {
    Method m = ViewTreeObserver.class.getMethod("removeOnGlobalLayoutListener", OnGlobalLayoutListener.class);
    m.invoke(observer, listener);   
} catch (NoSuchMethodException e) {
    e.printStackTrace();
} catch (IllegalArgumentException e) {
    e.printStackTrace();
} catch (IllegalAccessException e) {
    e.printStackTrace();
} catch (InvocationTargetException e) {
    e.printStackTrace();
}

私の質問は、リフレクションを使用して警告を回避する方が良いですか、それともリフレクションを回避する警告を無視する方が良いですか?

私のリフレクション コードは例外をキャッチしませんが、それが正しいかどうかはわかりません。

4

1 に答える 1

0

警告は単なる警告であり、実行中に問題が発生することはありません。

リフレクションと例外処理を使用してメソッドの存在をテストすることはコストがかかるため、可能な限り避ける必要があります。

Build.VERSION.SDK_INT実際に実行しているプラ​​ットフォームを確認するには、定数が必要です

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {
   // Do something using Gingerbread API
else {
   // Workaround for earlier version of android
}
于 2013-04-24T13:40:39.180 に答える