您的位置:首页 > 其它

管理Activity的实例

2011-03-09 08:32 162 查看
Android能够展现给用户的界面都是继承来自Activity,虽然Android操作系统能根据当前Activity的状态通过维护一个栈来进行管理,但是

开发人员只能在每个activity的所在的state改变的事件中进行相关的操作。而且,如果一个activity想去获得某个activity的时候,也是比较

麻烦的。还有,比如我想给当前如果是Home的界面,需要校验是否需要显示登录窗口,那如何去处理将不会让校验代码出现在Home的Activity中。因为本身显示登录窗口与否和当前的Activity没多大关系。下面就给出一些项目中的真实案例的代码,供大家去看看。

ActivityManager.这个类除了模拟栈的行为,还添加一些额外的功能。比如用户是否身份有效。

public class ActivityManager {
private ActivityManager() {
}
private static ActivityManager instance = new ActivityManager();
public static ActivityManager getInstance() {
return instance;
}
private List<Activity> activities = new ArrayList<Activity>();
private Activity topActivity;
private boolean topAcitivityActivited;
private boolean waitingForDialogContainer = true;
private boolean logining = false;
private String loginPrompt;
public void addActivity(Activity activity) {
if (!activities.contains(activity)) {
activities.add(activity);
}
}
public void removeActivity(Activity activity) {
activities.remove(activity);
}
public void setTopActivity(Activity topActivity) {
this.topActivity = topActivity;
}
public Activity getTopActivity() {
return topActivity;
}
public void setTopAcitivityActivited(boolean topAcitivityActivited) {
this.topAcitivityActivited = topAcitivityActivited;
if (waitingForDialogContainer) {
waitingForDialogContainer = false;
new Handler().post(new Runnable() {
public void run() {
showLoginDialog(loginPrompt);
}
});
}
}
public boolean isTopAcitivityActivited() {
return topAcitivityActivited;
}
public void showLoginDialog(String initialMessage) {
if (logining) {
return;
}
if (topActivity != null && topAcitivityActivited == true) {
logining = true;
new LoginView(topActivity, initialMessage).show();
} else {
waitingForDialogContainer = true;
loginPrompt = initialMessage;
}
}

@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都继承来自该类。代码如下。

public class ManagedActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityManager.getInstance().addActivity(this);
}

@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中还可以处理很多你想处理的功能,当那些界面状态发生变化。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: