Android能够展现给用户的界面都是继承来自Activity,虽然Android操作系统能根据当前Activity的状态通过维护一个栈来进行管理,但是
开发人员只能在每个activity的所在的state改变的事件中进行相关的操作。而且,如果一个activity想去获得某个activity的时候,也是比较
麻烦的。还有,比如我想给当前如果是Home的界面,需要校验是否需要显示登录窗口,那如何去处理将不会让校验代码出现在Home的Activity中。因为本身显示登录窗口与否和当前的Activity没多大关系。下面就给出一些项目中的真实案例的代码,供大家去看看。
ActivityManager.这个类除了模拟栈的行为,还添加一些额外的功能。比如用户是否身份有效。
@SuppressWarnings("unchecked")
public <T extends Activity> T getActivity(Class<T> cls){
for(Activity act : activities){
if(act.getClass() == cls){
return (T)act;
}
}
return null;
}
private void quit() {
for (Activity activity : activities) {
activity.finish();
}
waitingForDialogContainer = true;
loginPrompt = null;
}
public void onLoginReturned(boolean result) {
logining = false;
if (!result) {
quit();
}
}
}
ManagedActivity:这个类继承来自Activity.为了方便让ActivityManager的管理,每个Activity都继承来自该类。代码如下。
@Override
protected void onPause() {
super.onPause();
ActivityManager.getInstance().setTopAcitivityActivited(false);
}
@Override
protected void onDestroy() {
super.onDestroy();
ActivityManager.getInstance().removeActivity(this);
}
@Override
protected void onStart() {
super.onStart();
ActivityManager.getInstance().setTopActivity(this);
ActivityManager.getInstance().setTopAcitivityActivited(true);
}
}
ActivityManager的showLoginDialog可用来根据登录窗台来检测是否当前需要弹出登录框。而且这只是一部分小的作用,更多的大家
可以想想,这个ActivityManager中还可以处理很多你想处理的功能,当那些界面状态发生变化。