利用application类来实现activity管理
从Android 4.0(API-14)开始 application有一个方法
registerActivityLifecycleCallbacks(Application.ActivityLifecycleCallbacks callback)
可以监听activity的生命周期
所以我们可以直接在application中管理activity
直接上源码
public class MyApplication extends Application {
//activity列表
private static List<Activity> myActivitys = new ArrayList<>();
private static Activity topActivity;
@Override
public void onCreate() {
super.onCreate();
registerActivityListener();
}
/**
* 注册监听activity的创建和销毁
*/
private void registerActivityListener() {
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity, Bundle bundle) {
//activity创建
addActivity(activity);
}
@Override
public void onActivityStarted(Activity activity) {
}
@Override
public void onActivityResumed(Activity activity) {
topActivity = activity;
}
@Override
public void onActivityPaused(Activity activity) {
}
@Override
public void onActivityStopped(Activity activity) {
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle bundle) {
}
@Override
public void onActivityDestroyed(Activity activity) {
//activity销毁
removeActivity(activity);
}
});
}
/**
* 添加activity到列表
*
* @param activity 添加的activity
*/
public void addActivity(Activity activity) {
if (myActivitys == null)
return;
myActivitys.add(activity);
}
/**
* 从列表移除指定activity
*
* @param activity 移除的activity
*/
public void removeActivity(Activity activity) {
if (myActivitys == null || myActivitys.isEmpty())
return;
myActivitys.remove(activity);
}
/**
* 根据类名从列表获取activity
*
* @param className 类名
* @return 指定activity,没有则返回 null
*/
public static Activity getActivity(String className) {
Activity myActivity = null;
if (myActivitys != null) {
for (Activity activity : myActivitys)
if (activity.getClass().getName().equals(className))
myActivity = activity;
}
return myActivity;
}
/**
* 销毁指定activity
*
* @param activity 销毁的activity
*/
public static void finishActivity(Activity activity) {
if (myActivitys == null || myActivitys.isEmpty())
return;
if (activity != null) {
myActivitys.remove(activity);
activity.finish();
}
}
/**
* 销毁所有activity
*/
public static void finishAllActivity() {
if (myActivitys == null || myActivitys.isEmpty())
return;
for (Activity activity : myActivitys)
activity.finish();
myActivitys.clear();
}
/**
* 应用在前台时,当前页面
* @return
*/
public static Activity getTopActivity(){
return topActivity;
}