activity的生命周期管理。

来源:互联网 发布:淘宝低价包邮怎么赚钱 编辑:程序博客网 时间:2024/04/30 09:44

public static boolean isTopActivity(Context ctx) {ActivityManager activityManager = (ActivityManager) ctx.getSystemService(Context.ACTIVITY_SERVICE);List<RunningTaskInfo> tasksInfo = activityManager.getRunningTasks(1);if (tasksInfo.size() > 0) {if (ctx.getPackageName().equals(tasksInfo.get(0).topActivity.getPackageName())) {return true;}}return false;}public String getTopActivity(Context ctx) {ActivityManager activityManager = (ActivityManager) ctx.getSystemService(Context.ACTIVITY_SERVICE);List<RunningTaskInfo> tasksInfo = activityManager.getRunningTasks(1);if (tasksInfo.size() > 0) {return ctx.getPackageName();}return "";}

4.0前版本判断是否前台和获取正在运行activity的方法,

android4.0出了这样一个api.

    private class ActivityLifecycleCallbacksImpl implements            ActivityLifecycleCallbacks {        @Override        public void onActivityCreated(Activity activity,                Bundle savedInstanceState) {            // TODO Auto-generated method stub            /*activity.finish();*/            if(activity.getClass().getName().equals("com.example.testactivitymanager.MainActivity"))            {                Intent i = new Intent();                i.setClass(activity, SecondActivity.class);                activity.startActivity(i);                activity.finish();            }            Log.e("TestActivitymanager", "onCreate,"                    + activity.getClass().getName());        }        @Override        public void onActivityStarted(Activity activity) {            // TODO Auto-generated method stub        }        @Override        public void onActivityResumed(Activity activity) {            // TODO Auto-generated method stub        }         @Override        public void onActivityPaused(Activity activity) {            // TODO Auto-generated method stub        }        @Override        public void onActivityStopped(Activity activity) {            // TODO Auto-generated method stub        }        @Override        public void onActivitySaveInstanceState(Activity activity,                Bundle outState) {            // TODO Auto-generated method stub        }        @Override        public void onActivityDestroyed(Activity activity) {            // TODO Auto-generated method stub        }    }
他是一个接口,可以让我们的application直接检测到我们项目里每个activity的状态变化。
    public void onCreate() {        // TODO Auto-generated method stub        super.onCreate();        callBackImpl = new ActivityLifecycleCallbacksImpl();        this.registerActivityLifecycleCallbacks(callBackImpl);            mApp = this;    }

用法如上,我们来看Application里的源码
public void registerActivityLifecycleCallbacks(ActivityLifecycleCallbacks callback) {        synchronized (mActivityLifecycleCallbacks) {            mActivityLifecycleCallbacks.add(callback);        }    }
放到 arraylist里,然后有个方法遍历回调
void dispatchActivityCreated(Activity activity, Bundle savedInstanceState) {        Object[] callbacks = collectActivityLifecycleCallbacks();        if (callbacks != null) {            for (int i=0; i<callbacks.length; i++) {                ((ActivityLifecycleCallbacks)callbacks[i]).onActivityCreated(activity,                        savedInstanceState);            }        }    }

这个方法,会在Activity源码的onCreate里调用.4.0下。

getApplication().dispatchActivityCreated(this, savedInstanceState);

我们通过这个接口还能获取到当前正在桌面运行的activity.判断当前APP是否运行在前台,做一个管理器
public void addActivity(FragmentActivity activity) {if (activity != null) {activityList.add(activity);}}public void removeActivity(Activity activity) {if (activity != null) {activityList.remove(activity);}}public void finishActivity(String className) {for (Activity activity : activityList) {if (activity.getClass().getName().equals(className)) {removeActivity(activity);activity.finish();// 会执行destroy方法,而此方法中有removeActivity(activity)的方法}}}
其中activity可以定义成
private static ConcurrentLinkedQueue<FragmentActivity> activityList = new ConcurrentLinkedQueue<FragmentActivity>();
除了用上述方法,我们还可以在我们的baseActivity(每个项目至少应该有这个吧)里的create方法add, 返回方法里来调用finish.贴一个launchback方法。
public void launchBack() {super.launchBack();overridePendingTransition(R.anim.activity_left_in, R.anim.activity_right_in);if (MyApplication.getInstance().isExistActivity(MainActivity.class.getName())) {stopProgressDialog();String clzName = getClass().getName();MyApplication.getInstance().finishActivity(clzName);} else {launchMain();}};
                                             
0 0
原创粉丝点击