我希望我的應用能夠在預安卓2.0操作系統(即1.5和1.6)上運行。我需要在2.0及更高版本中包含Activity.onAttachedToWindow()。我如何使用反射(或任何其他方法)使我的應用程序工作在2.0以前的Android操作系統上運行?如何在Activity.onAttachedToWindow()上使用反射
回答
Activity
的onAttachedToWindow
爲空。這意味着您可以避免撥打super.onAttachedToWindow
。所以,最簡單的方法是:
@Override
public void onAttachedToWindow()
{
Log.e("TEST", "onAttachedToWindow");
}
Android操作系統將調用onAttachedToWindow
在API級別5+(2.0+)。而在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 */
}
}
應該是:superOnAttachedToWindow.invoke(activityClass); 否則我得到一個堆棧溢出... – user645402 2011-05-23 22:56:06
@ user645402我認爲將其更改爲'activityClass',這意味着將'Class'作爲'this'傳遞給'onAttachedToWindow',並沒有真正的幫助,你可能得到了'IllegalArgumentException '你沒有登錄。 – TWiStErRob 2014-12-10 12:45:36
@inazaruk我認爲他是對的,反射在這裏沒有幫助,因爲'invoke'的文檔說:「*反射方法調用遵循通常的方法查找過程。*」這意味着它是多態的,因此調用你的覆蓋,而不是'super',請參閱http://stackoverflow.com/q/5411434/253468;但是您可以使用反射來檢查是否存在'super.onAttachedToWindow()',如果沒有引發'NoSuchMethodException',則將其稱爲正常方式。 – TWiStErRob 2014-12-10 12:49:44
- 1. 如何使用反射
- 2. 如何使用反射
- 3. 如何使用反射
- 4. 如何使用反射
- 5. 如何使用Java反射
- 6. 如何使用反射
- 7. 如何使用反射
- 8. 如何使用反射
- 9. 如何使用反射
- 10. 如何使用反射
- 11. 如何使用反射
- 12. 如何使用反射
- 13. 如何使用反射
- 14. 如何使用反射
- 15. 爪哇 - 反思 - 如何使用反射
- 16. 如何在three.js中使用反射?
- 17. 如何在C#中使用反射時
- 18. 如何在FluentValidation中使用反射?
- 19. 如何在母版頁上使用反射?
- 20. 如何在衛星組件上使用反射?
- 21. rails如何在模型的attr_accessible上使用反射/內省?
- 22. 如何在ICollection類型的屬性上使用反射?
- 23. 如何使用反射來創建一個「反射機器」
- 24. 使用反射
- 25. 使用反射
- 26. 使用反射
- 27. 使用反射
- 28. 使用反射
- 29. 使用反射
- 30. 使用反射
你是什麼意思下「有」?你想調用這個方法還是重寫它? – inazaruk 2011-05-17 19:06:08
另一方面,我建議在投入1.5/1.6支持之前考慮三次。只有大約5%的活躍用戶,但你的代碼變得難以支持。作爲另一種選擇,您可以堅持1.6,並保持1.5(約2.3%的用戶)。 – inazaruk 2011-05-17 19:08:25
我的意思是我需要重寫它。這是一種奇怪的情況,因爲我不是那個調用它,所以我不知道如何反射可以在這裏發揮作用... – user645402 2011-05-18 02:14:55