[Android设计模式]Android退出应用程序终极方法_移动开发_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > 移动开发 > [Android设计模式]Android退出应用程序终极方法

[Android设计模式]Android退出应用程序终极方法

 2013/10/18 22:47:35  Mainroadlee  博客园  我要评论(0)
  • 摘要:如何干净彻底地退出Android应用程序,是很多开发者的心头痒。如何干净地关闭所有已打开的Activity?如何关闭指定的Activity?如何关闭一类Activity?这里,我们提出一种通过实现对Application的扩展,实现了一种高效管理Activity,实现Android干净彻底地退出应用程序。首先,我们将管理Activity的功能通过一个扩展的Application类来实现。1publicclassMyApplicationextendsApplication
  • 标签:程序 android 方法 应用 模式 应用程序 设计 设计模式

如何干净彻底地退出Android应用程序,是很多开发者的心头痒。如何干净地关闭所有已打开的Activity? 如何关闭指定的Activity? 如何关闭一类Activity? 这里,我们提出一种通过实现对Application的扩展,实现了一种高效管理Activity,实现Android干净彻底地退出应用程序。

class="alignnone size-medium wp-image-161" src="/Upload/Images/2013101822/F76EC9DCBCA57949.jpeg" alt="exit app" />

 

首先,我们将管理Activity的功能通过一个扩展的Application类来实现。

 
 1 publicclassMyApplicationextendsApplication{
 2     privatestaticStack<Activity>activityStack;
 3  
 4     /**
 5      *单例模式(Singleton Pattern),使用private构造函数,使得外部不能实例化该类
 6      */
 7     privateMyApplication(){  
 8     }
 9     publicstaticMyApplication getInstance(){
10         returnExitHolder.instance;
11     }
12     /**
13      *内部类,当ExitApplication被加载的时候,内部类不会被初始化,只有当getinstance方法被调用才加载此类,取得instance实例.
14      *由于instance在类初始化的时候完成,天生对线程友好,所以不需要使用同步
15      */
16     privatestaticclassExitHolder{
17         privatestaticMyApplication instance=newMyApplication();
18     }
19     /**
20      * add Activity 添加Activity到栈
21      */
22     publicvoidaddActivity(Activity activity){
23         if(activityStack==null){            
24             activityStack=newStack<Activity>();        
25         }        
26         activityStack.add(activity);    
27     }
28     /**
29      * get current Activity 获取当前Activity(栈中最后一个压入的)
30      */
31     publicActivity currentActivity(){
32         Activity activity=activityStack.lastElement();
33         returnactivity;
34     }
35     /**
36      * 结束当前Activity(栈中最后一个压入的)
37      */
38     publicvoidfinishActivity(){
39         Activity activity=activityStack.lastElement();
40         finishActivity(activity);
41     }
42  
43     /**
44      * 结束指定的Activity
45      */
46     publicvoidfinishActivity(Activity activity){
47         if(activity!=null){
48             activityStack.remove(activity);
49             activity.finish();
50             activity=null;
51         }
52     }
53  
54     /**
55      * 结束指定类名的Activity
56      */
57     publicvoidfinishActivity(Class<?>cls){
58         for(Activity activity:activityStack){
59             if(activity.getClass().equals(cls)){
60                 finishActivity(activity);
61             }
62         }
63     }
64  
65     /**
66      * 结束所有Activity
67      */
68     publicvoidfinishAllActivity(){
69         for(inti=0,size=activityStack.size();i<size;i++){
70             if(null!=activityStack.get(i)){
71                 activityStack.get(i).finish();
72             }
73         }
74         activityStack.clear();
75     }
76  
77     /**
78      * 退出应用程序
79      */
80     publicvoidAppExit(){
81         try{
82             finishAllActivity();
83         }catch(Exceptione){
84         }
85     }
86  
87 }

 

注意,为了在我们自己的应用程序中使用这个自定义的Application类,而不是默认的Application类。需要在Manifest文件中修改一下<Application>的属性( android:name)

例如:

 
1 <application
2    android:icon="@drawable/icon"
3    android:label="@string/app_name"
4    android:name="your_package_name_here.MyApplication">

 

使用方法:

方法1: 之后我们在所有的activity的oncreate方法中通过getinstance得到一个MyApplication的实例,然后调用addActivity方法把当前的activity加入到stack中,如果要退出应用程序只需要调用AppExit方法即可。

方法2: 自定义一个继承Activity类的BaseActivity

 
 1 publicclassBaseActivityextendsActivity{
 2     @Override
 3     protectedvoidonCreate(Bundle savedInstanceState){
 4         super.onCreate(savedInstanceState);
 5         //添加Activity到堆栈
 6         MyApplication.getInstance().addActivity(this);
 7     }
 8  
 9     @Override
10     protectedvoidonDestroy(){
11         super.onDestroy();
12         //结束Activity&从栈中移除该Activity
13         MyApplication.getInstance().finishActivity(this);
14     }
15  
16 }

 

后续的Activity 都集成这个BaseActivity就可以了。

Android的官方文档中写到”没有必要自定义Application类”

There is normally no need to subclass Application.

但事实上,通过逆向工程国际大厂的Android应用,我发现各厂都自定义了Application类用以实现Global变量操作和Activity管理。所以我们也学习一下吧~(你也有兴趣通过逆向工程来借鉴一下别人的Android应用?别急,后续的教程里会陆续介绍的。)

以上的代码只是基本的Activity管理方案,以此为框架,我们可以加入更多关于Acitivity的管理方法以及其他全局变量的操作。

欢迎访问 http://www.mobiletuts.me 一个及时更新的Android开发教程网站

发表评论
用户名: 匿名