管理Activity的实例
2011-03-09 08:32
162 查看
Android能够展现给用户的界面都是继承来自Activity,虽然Android操作系统能根据当前Activity的状态通过维护一个栈来进行管理,但是
开发人员只能在每个activity的所在的state改变的事件中进行相关的操作。而且,如果一个activity想去获得某个activity的时候,也是比较
麻烦的。还有,比如我想给当前如果是Home的界面,需要校验是否需要显示登录窗口,那如何去处理将不会让校验代码出现在Home的Activity中。因为本身显示登录窗口与否和当前的Activity没多大关系。下面就给出一些项目中的真实案例的代码,供大家去看看。
ActivityManager.这个类除了模拟栈的行为,还添加一些额外的功能。比如用户是否身份有效。
ManagedActivity:这个类继承来自Activity.为了方便让ActivityManager的管理,每个Activity都继承来自该类。代码如下。
ActivityManager的showLoginDialog可用来根据登录窗台来检测是否当前需要弹出登录框。而且这只是一部分小的作用,更多的大家
可以想想,这个ActivityManager中还可以处理很多你想处理的功能,当那些界面状态发生变化。
开发人员只能在每个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中还可以处理很多你想处理的功能,当那些界面状态发生变化。
相关文章推荐
- android 完美退出APP的实例代码(管理activity)
- [Android知识体系]之四大组件:activity(生命周期管理)
- 学习实例.文章管理.数据库操作类.DBUtil.java
- 实例管理
- vue-cli入门(三)——人员管理实例
- 全面介绍Windows内存管理机制及C++内存分配实例(一):进程空间
- 文件系统管理 之 实例解说 fdisk 使用方法
- 第一个cmake,实例学习,项目管理
- Android 使用bundle在activity之间交换数据 DEMO (填写注册信息实例)
- [Android实例] Android activity动画跳转案例分析
- Android开发-自定义application对activity的管理与控制
- python进程管理工具supervisor使用实例
- 为什么不能在Activity中的属性里创建Button的实例,会报空指针
- python进程管理工具supervisor使用实例
- ORACLE实例管理之数据库启动阶段
- 跟我一起学WCF(8)——WCF中Session、实例管理详解
- linux服务器 磁盘和文件系统管理(三) LVM应用实例
- Android源码剖析之Framework层实战版(Ams管理Activity启动)
- 管理对SQL Server实例的访问(2)(ZZ)
- 简单SNMP管理程序的VC++代码实例实现