我们做的 APP 上有没有遇到下面两种情况
- 在详情页或者某个页面点击某个操作的时候, 需要登录验证, 没有登录的时候需要跳转到登录界面, 但是有可能还需要再去注册. 注册成功后直接登录, 并且回到跳转登录前的页面.
- 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);
}
}
网友评论