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

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

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

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

public class MyApplication extends Application {

private static Stack activityStack;

private static MyApplication singleton;

@Override

public void onCreate()

{

super.onCreate();

singleton=this;

}

// Returns the application instance

public static MyApplication getInstance() {

return singleton;

}

/**

* add Activity 添加Activity到栈

*/

public void addActivity(Activity activity){

if(activityStack ==null){

activityStack =new Stack();

}

activityStack.add(activity);

}

/**

* get current Activity 获取当前Activity(栈中最后一个压入的)

*/

public Activity currentActivity() {

Activity activity = activityStack.lastElement();

return activity;

}

/**

* 结束当前Activity(栈中最后一个压入的)

*/

public void finishActivity() {

Activity activity = activityStack.lastElement();

finishActivity(activity);

}

/**

* 结束指定的Activity

*/

public void finishActivity(Activity activity) {

if (activity != null) {

activityStack.remove(activity);

activity.finish();

activity = null;

}

}

/**

* 结束指定类名的Activity

*/

public void finishActivity(Class cls) {

for (Activity activity : activityStack) {

if (activity.getClass().equals(cls)) {

finishActivity(activity);

}

}

}

/**

* 结束所有Activity

*/

public void finishAllActivity() {

for (int i = 0, size = activityStack.size(); i < size; i++) {

if (null != activityStack.get(i)) {

activityStack.get(i).finish();

}

}

activityStack.clear();

}

/**

* 退出应用程序

*/

public void AppExit() {

try {

finishAllActivity();

} catch (Exception e) {

}

}

}

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

例如:

1

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 public class BaseActivity extends Activity{

2 @Override

3 protected void onCreate(Bundle savedInstanceState){

4 super.onCreate(savedInstanceState);

5 //添加Activity到堆栈

6 MyApplication.getInstance().addActivity(this);

7 }

8

9 @Override

10 protected void onDestroy(){

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开发教程网站

相关推荐

手机微博怎么定时发布
365提款验证

手机微博怎么定时发布

⌛ 01-23 👁️ 4966
币安认证全攻略:了解认证级别与所需时间
365提款验证

币安认证全攻略:了解认证级别与所需时间

⌛ 01-11 👁️ 8225
《剑网3》唐门PVP惊羽诀配装及技能介绍经验分享
bet28365365娱乐场

《剑网3》唐门PVP惊羽诀配装及技能介绍经验分享

⌛ 12-02 👁️ 1993