【Android Tip】
Android 获取当前Activity对象的方式:
背景:(当你不能使用this获取Activity对象)如何方便地当前Activity对象
思路:
1.维护对象栈
维护一个Activity的対象栈,在每个Activity的生命周期方法执行的时候,控制add和remove,栈顶元素就是当前的Activity对象。为了代码的复用,这个操作可以写在BaseActivity中,这个思路很正常。代码就不贴了。
2. 反射
使用反射来获取当前Activity对象。(个人认为是相对优雅和解耦的方式)
查看源码发现 Activity Thread 这个类管理着所有的Activity对象,也就持有所有的Activity对象,使用反射获得当前ActivityThread对象
,然后就能拿到当前的Activity对象
示例:
public static Activity getCurrentActivity () {
try {
Class activityThreadClass = Class.forName("android.app.ActivityThread");
Object activityThread = activityThreadClass.getMethod("currentActivityThread").invoke(
null);
Field activitiesField = activityThreadClass.getDeclaredField("mActivities");
activi