单例模式之强大的activity的管理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_24675479/article/details/79621310
public class ActivityManager {
    //增加删除操作多,栈是先进后出
    public Stack<Activity> mActivities;
<span class="hljs-keyword">private</span> <span class="hljs-title">ActivityManager</span>() {
    mActivities = <span class="hljs-keyword">new</span> Stack&lt;&gt;();
}

<span class="hljs-comment">//双重校验锁</span>
<span class="hljs-keyword">private</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">volatile</span> ActivityManager mInstance;

<span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> ActivityManager <span class="hljs-title">getInstance</span>() {
    <span class="hljs-keyword">if</span> (mInstance == <span class="hljs-keyword">null</span>) {
        <span class="hljs-keyword">synchronized</span> (ActivityManager.class) {
            <span class="hljs-keyword">if</span> (mInstance == <span class="hljs-keyword">null</span>) {
                mInstance = <span class="hljs-keyword">new</span> ActivityManager();
            }
        }
    }
    <span class="hljs-keyword">return</span> mInstance;
}

<span class="hljs-javadoc">/**
 * 添加
 */</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">attach</span>(Activity activity) {
    <span class="hljs-keyword">if</span> (activity != <span class="hljs-keyword">null</span>) {
        mActivities.add(activity);
    }
}

<span class="hljs-javadoc">/**
 * 移除解绑 - 防止内存泄漏
 */</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">detach</span>(Activity activity) {
    <span class="hljs-keyword">int</span> size = mActivities.size();
    <span class="hljs-keyword">for</span> (<span class="hljs-keyword">int</span> i = size - <span class="hljs-number">1</span>; i &gt;= <span class="hljs-number">0</span>; i--) {

        Activity currentActivity = mActivities.get(i);
        <span class="hljs-keyword">if</span> (currentActivity.getClass().equals(activity.getClass())) {
            mActivities.remove(i);
            size--;
            i++;
        }
    }
}

<span class="hljs-javadoc">/**
 * 移除指定的activity
 * 先进后出
 */</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">remove</span>(Activity activity) {
    <span class="hljs-keyword">int</span> size = mActivities.size();
    <span class="hljs-keyword">for</span> (<span class="hljs-keyword">int</span> i = size - <span class="hljs-number">1</span>; i &gt; <span class="hljs-number">0</span>; i--) {
        Activity currentActivity = mActivities.get(i);
        <span class="hljs-keyword">if</span> (currentActivity.getClass().equals(activity.getClass())) {
            <span class="hljs-comment">//销毁当前activity</span>
            currentActivity.finish();
            mActivities.remove(i);<span class="hljs-comment">//从栈空间移除</span>
            i++;
            size--;
        }
    }
}
<span class="hljs-javadoc">/**
 * 根据当前的类名进行关闭
 */</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">finish</span>(Class&lt;? extends Activity&gt; activityClass){
    <span class="hljs-keyword">int</span> size = mActivities.size();
    <span class="hljs-keyword">for</span> (<span class="hljs-keyword">int</span> i = size-<span class="hljs-number">1</span>; i &gt; <span class="hljs-number">0</span>; i--) {
        Activity activity = mActivities.get(i);
        <span class="hljs-keyword">if</span>(activity.getClass().getCanonicalName().equals(activityClass.getCanonicalName())){
            activity.finish();
            mActivities.remove(i);
            i++;
            size--;
        }
    }
}
<span class="hljs-javadoc">/**
 * 删除当前的activity
 */</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">removeCurrent</span>() {
 <span class="hljs-comment">/*   Activity activity = mActivities.get(mActivities.size() - 1);
    activity.finish();
    mActivities.remove(mActivities.size()-1);*/</span>
    Activity activity = mActivities.lastElement();
    activity.finish();
    mActivities.remove(activity);
}

<span class="hljs-javadoc">/**
 * 移除所有的activity
 */</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">removeAll</span>() {
    <span class="hljs-keyword">for</span> (<span class="hljs-keyword">int</span> i = mActivities.size() - <span class="hljs-number">1</span>; i &gt;= <span class="hljs-number">0</span>; i--) {
        Activity activity = mActivities.get(i);
        activity.finish();
        mActivities.remove(activity);
    }
}

<span class="hljs-comment">//返回栈大小</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">int</span> <span class="hljs-title">size</span>() {
    <span class="hljs-keyword">return</span> mActivities.size();
}

}

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_24675479/article/details/79621310
public class ActivityManager {
    //增加删除操作多,栈是先进后出
    public Stack<Activity> mActivities;
<span class="hljs-keyword">private</span> <span class="hljs-title">ActivityManager</span>() {
    mActivities = <span class="hljs-keyword">new</span> Stack&lt;&gt;();
}

<span class="hljs-comment">//双重校验锁</span>
<span class="hljs-keyword">private</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">volatile</span> ActivityManager mInstance;

<span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> ActivityManager <span class="hljs-title">getInstance</span>() {
    <span class="hljs-keyword">if</span> (mInstance == <span class="hljs-keyword">null</span>) {
        <span class="hljs-keyword">synchronized</span> (ActivityManager.class) {
            <span class="hljs-keyword">if</span> (mInstance == <span class="hljs-keyword">null</span>) {
                mInstance = <span class="hljs-keyword">new</span> ActivityManager();
            }
        }
    }
    <span class="hljs-keyword">return</span> mInstance;
}

<span class="hljs-javadoc">/**
 * 添加
 */</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">attach</span>(Activity activity) {
    <span class="hljs-keyword">if</span> (activity != <span class="hljs-keyword">null</span>) {
        mActivities.add(activity);
    }
}

<span class="hljs-javadoc">/**
 * 移除解绑 - 防止内存泄漏
 */</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">detach</span>(Activity activity) {
    <span class="hljs-keyword">int</span> size = mActivities.size();
    <span class="hljs-keyword">for</span> (<span class="hljs-keyword">int</span> i = size - <span class="hljs-number">1</span>; i &gt;= <span class="hljs-number">0</span>; i--) {

        Activity currentActivity = mActivities.get(i);
        <span class="hljs-keyword">if</span> (currentActivity.getClass().equals(activity.getClass())) {
            mActivities.remove(i);
            size--;
            i++;
        }
    }
}

<span class="hljs-javadoc">/**
 * 移除指定的activity
 * 先进后出
 */</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">remove</span>(Activity activity) {
    <span class="hljs-keyword">int</span> size = mActivities.size();
    <span class="hljs-keyword">for</span> (<span class="hljs-keyword">int</span> i = size - <span class="hljs-number">1</span>; i &gt; <span class="hljs-number">0</span>; i--) {
        Activity currentActivity = mActivities.get(i);
        <span class="hljs-keyword">if</span> (currentActivity.getClass().equals(activity.getClass())) {
            <span class="hljs-comment">//销毁当前activity</span>
            currentActivity.finish();
            mActivities.remove(i);<span class="hljs-comment">//从栈空间移除</span>
            i++;
            size--;
        }
    }
}
<span class="hljs-javadoc">/**
 * 根据当前的类名进行关闭
 */</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">finish</span>(Class&lt;? extends Activity&gt; activityClass){
    <span class="hljs-keyword">int</span> size = mActivities.size();
    <span class="hljs-keyword">for</span> (<span class="hljs-keyword">int</span> i = size-<span class="hljs-number">1</span>; i &gt; <span class="hljs-number">0</span>; i--) {
        Activity activity = mActivities.get(i);
        <span class="hljs-keyword">if</span>(activity.getClass().getCanonicalName().equals(activityClass.getCanonicalName())){
            activity.finish();
            mActivities.remove(i);
            i++;
            size--;
        }
    }
}
<span class="hljs-javadoc">/**
 * 删除当前的activity
 */</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">removeCurrent</span>() {
 <span class="hljs-comment">/*   Activity activity = mActivities.get(mActivities.size() - 1);
    activity.finish();
    mActivities.remove(mActivities.size()-1);*/</span>
    Activity activity = mActivities.lastElement();
    activity.finish();
    mActivities.remove(activity);
}

<span class="hljs-javadoc">/**
 * 移除所有的activity
 */</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">removeAll</span>() {
    <span class="hljs-keyword">for</span> (<span class="hljs-keyword">int</span> i = mActivities.size() - <span class="hljs-number">1</span>; i &gt;= <span class="hljs-number">0</span>; i--) {
        Activity activity = mActivities.get(i);
        activity.finish();
        mActivities.remove(activity);
    }
}

<span class="hljs-comment">//返回栈大小</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">int</span> <span class="hljs-title">size</span>() {
    <span class="hljs-keyword">return</span> mActivities.size();
}

猜你喜欢

转载自blog.csdn.net/Hunter2916/article/details/82758716
今日推荐