方式一:使用生命周期回调
1、Application中registerActivityLifecycleCallbacks注册Activity生命周期回调
public class App extends MultiDexApplication {
@Override
public void onCreate() {
super.onCreate();
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
}
@Override
public void onActivityStarted(Activity activity) {
}
@Override
public void onActivityResumed(Activity activity) {
MyActivityManager.getInstance().setCurrentActivity(activity);
}
@Override
public void onActivityPaused(Activity activity) {
}
@Override
public void onActivityStopped(Activity activity) {
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
}
@Override
public void onActivityDestroyed(Activity activity) {
}
});
}
}
2、ActivityMananager对Activity进行保存,使用WeakReference防止内存泄漏
public class MyActivityManager {
private static MyActivityManager sInstance = new MyActivityManager();
private WeakReference sCurrentActivityWeakRef;
private MyActivityManager() {
}
public static MyActivityManager getInstance() {
return sInstance;
}
public Activity getCurrentActivity() {
Activity currentActivity = null;
if (sCurrentActivityWeakRef != null) {
currentActivity = sCurrentActivityWeakRef.get();
}
return currentActivity;
}
public void setCurrentActivity(Activity activity) {
sCurrentActivityWeakRef = new WeakReference(activity);
}
}
方式二:Jetpack的LifeCycle获取生命周期
Lifecycle获取Activity和Fragment生命周期,可以参考下LifeCycle的使用方法:
首先追踪了Activity生命周期的调用到底来自何处, 在Activity的onCreate方法中瞧见
getApplication().dispatchActivityCreated(this, savedInstanceState);
去Application类中找dispatchActivityCreated方法
void dispatchActivityCreated(Activity activity, Bundle savedInstanceState) {
Object[] callbacks = collectActivityLifecycleCallbacks();
if (callbacks != null) {
for (int i=0; i activityLifecycleCallbacksClass = Class.forName("android.app.Application$ActivityLifecycleCallbacks");
//创建一个ActivityLifecycleCallbacks的实现对象
final VirtualActivityLifecycleCallbacks callbacks = new VirtualActivityLifecycleCallbacks();
//创建一个ActivityLifecycleCallbacks的代理对象
Object proxyActivityLifecycleCallbacks =
Proxy.newProxyInstance(activityLifecycleCallbacksClass.getClassLoader(),
new Class[]{activityLifecycleCallbacksClass},
new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Log.i(TAG, activity.getClass().getSimpleName() + "---" + method.getName());
return method.invoke(callbacks, args);
}
});
//将代理对象添加到callbacksList集合中
callbacksList.add((Application.ActivityLifecycleCallbacks) proxyActivityLifecycleCallbacks);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
/**
* 创建ActivityLifecycleCallbacks的实现类
*/
private static class VirtualActivityLifecycleCallbacks implements Application.ActivityLifecycleCallbacks {
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
}
@Override
public void onActivityStarted(Activity activity) {
}
@Override
public void onActivityResumed(Activity activity) {
}
@Override
public void onActivityPaused(Activity activity) {
}
@Override
public void onActivityStopped(Activity activity) {
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
}
@Override
public void onActivityDestroyed(Activity activity) {
}
}
我们只需要在基类Activity的onCreate方法中调用 LifeCycleListenerHelper.hook(this);