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);
    }
}


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