如何在 Activity.onAttachedToWindow() 上使用反射



我希望我的应用能够在 Android 2.0 之前的操作系统(即 1.5 和 1.6)上运行。 我需要包含 2.0 及更高版本的 Activity.onAttachedToWindow()。 如何使用反射(或任何其他方法)使我的应用在 2.0 之前的 Android 操作系统上正常工作?

Activity

onAttachedToWindow为空。这意味着您可以避免调用super.onAttachedToWindow。所以最简单的方法是:

@Override
public void onAttachedToWindow()
{   
     Log.e("TEST", "onAttachedToWindow");               
}

Android 操作系统将在 API 级别 5+ (2.0+) 上调用您的onAttachedToWindow。而在 1.5/1.6 上,这个函数永远不会被调用。


如果要通过反射从超类调用onAttachedToWindow的实现:

@Override
public void onAttachedToWindow()
{   
    Log.e("TEST", "onAttachedToWindow");
    /* calling:
     * super.onAttachedToWindow(); 
     */
    Class<?> activityClass = (Class<?>)getClass().getSuperclass();
    try
    {
        Method superOnAttachedToWindow = activityClass.getMethod("onAttachedToWindow");
        superOnAttachedToWindow.invoke(this);
    }
    catch(InvocationTargetException ex)
    {
        //TODO: add exception handling
    }
    catch(IllegalAccessException ex)
    {
        //TODO: add exception handling;
    }
    catch(IllegalArgumentException ex)
    {
        //TODO: add exception handling
    }
    catch(NoSuchMethodException ex)
    {
        /* you are here if `onAttachedToWindow` does not exist */           
    }
}

相关内容

  • 没有找到相关文章

最新更新