Activity 管理工具

我们做的 APP 上有没有遇到下面两种情况

  1. 在详情页或者某个页面点击某个操作的时候, 需要登录验证, 没有登录的时候需要跳转到登录界面, 但是有可能还需要再去注册. 注册成功后直接登录, 并且回到跳转登录前的页面.
  2. APP 需要单点登录, 有可能在任何一个页面, 我们正在使用的过程中, 在进行某个操作的时候突然弹窗提示账号在别的地方被登录了, 然后我们被挤下线. 那么这个弹窗要怎么处理呢?

今天来做一个 ActivityManager 类. 直接复制过去就可以使用哟.

/**
 * 懒汉式单例模式, DCL
 */
public class ActivityManager {

    private static volatile ActivityManager mInstance;

    private Stack<Activity> mActivities;

    private ActivityManager() {
        mActivities = new Stack<>();
    }

    public static ActivityManager getInstance() {
        if (mInstance == null) {
            synchronized (ActivityManager.class) {
                if (mInstance == null) {
                    mInstance = new ActivityManager();
                }
            }
        }
        return mInstance;
    }

    public void attach(Activity activity) {
        mActivities.add(activity);
    }

    public void detach(Activity detachActivity) {
        int size = mActivities.size();
        for (int i = 0; i < size; i++) {
            Activity activity = mActivities.get(i);
            if (activity == detachActivity) {
                mActivities.remove(i);
                i--;
                size--;
            }
        }
    }

    public void finish(Activity finishActivity) {
        int size = mActivities.size();
        for (int i = 0; i < size; i++) {
            Activity activity = mActivities.get(i);
            if (activity == finishActivity) {
                mActivities.remove(i);
                finishActivity.finish();
                i--;
                size--;
            }
        }
    }

    public void finish(Class<? extends BaseActivity> activityClass) {
        int size = mActivities.size();
        for (int i = 0; i < size; i++) {
            Activity activity = mActivities.get(i);
            if (activity.getClass().getCanonicalName().equals(activityClass.getCanonicalName())) {
                mActivities.remove(i);
                activity.finish();
                i--;
                size--;
            }
        }
    }

    public void exitApplication() {
        int size = mActivities.size();
        for (int i = 0; i < size; i++) {
            Activity activity = mActivities.get(i);
            mActivities.remove(i);
            activity.finish();
            i--;
            size--;
        }
        System.exit(0);
    }


    /**
     * 获得栈顶的 Activity
     *
     * @return
     */
    public Activity getTopOfStackActivity() {
        return mActivities.lastElement();
    }
}

接着在 BaseActivity

public class BaseActivity extends AppCompatActivity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ActivityManager.getInstance().attach(this);
    }

    @Override
    protected void onDestroy() {
        ActivityManager.getInstance().detach(this);
        super.onDestroy();
    }
}

使用

public class MainActivity extends BaseActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setTitle("MainActivity");
    }

    public void click(View view) {
        Intent intent = new Intent(this, HomeActivity.class);
        startActivity(intent);
    }
}

public class HomeActivity extends BaseActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setTitle("HomeActivity");
    }

    public void click(View view) {
        Intent intent = new Intent(this, OrderActivity.class);
        startActivity(intent);
    }
}

public class OrderActivity extends BaseActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setTitle("OrderActivity");
    }

    public void click(View view) {
        ActivityManager.getInstance().finish(this);
        ActivityManager.getInstance().finish(HomeActivity.class);
    }
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章