Android中有一种情况是,当我们点击物理返回键的时候,我们的App要退出应用程序同时应该吧所有的活动Activity的所有生命周期给销毁。
实现方式如下:(实现Activity的生命周期)
public class BaseActivityLifeCallback implements Application.ActivityLifecycleCallbacks {
public final List<WeakReference<Activity>> weakReferences = new LinkedList<>();
private boolean isAppForeground;
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
weakReferences.add(new WeakReference<>(activity));
}
@Override
public void onActivityStarted(Activity activity) {
}
@Override
public void onActivityResumed(Activity activity) {
isAppForeground = true;
}
@Override
public void onActivityPaused(Activity activity) {
isAppForeground = false;
}
@Override
public void onActivityStopped(Activity activity) {
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
}
@Override
public void onActivityDestroyed(Activity activity) {
final Iterator<WeakReference<Activity>> it = weakReferences.iterator();
while (it.hasNext()) {
final WeakReference<Activity> weakReference = it.next();
if (weakReference.get() == null) {
it.remove();
} else if (weakReference.get() == activity) {
it.remove();
}
}
}
void finishAll() {
for (WeakReference<Activity> weakReference : weakReferences) {
final Activity activity = weakReference.get();
if (activity != null) {
activity.finish();
}
}
weakReferences.clear();
}
public Activity getTopActivity() {
if (weakReferences.size() > 0) {
return weakReferences.get(weakReferences.size() - 1).get();
} else {
return null;
}
}
public void popTopActivity() {
final Iterator<WeakReference<Activity>> it = weakReferences.iterator();
final WeakReference<Activity> weakReference = it.next();
final Activity activity = weakReference.get();
if (activity == null) {
it.remove();
} else {
activity.finish();
}
}
public boolean isAppForeground() {
return isAppForeground;
}
}
使用方式:
BaseActivityLifeCallback mActivityLifeCallback = new BaseActivityLifeCallback();
registerActivityLifecycleCallbacks(mActivityLifeCallback);