[Android设计模式]Android退出应用程序终极方法
来源:互联网 发布:塔西陀陷阱 知乎 编辑:程序博客网 时间:2024/05/29 17:57
如何干净彻底地退出Android应用程序,是很多开发者的心头痒。如何干净地关闭所有已打开的Activity? 如何关闭指定的Activity? 如何关闭一类Activity? 这里,我们提出一种通过实现对Application的扩展,实现了一种高效管理Activity,实现Android干净彻底地退出应用程序。
首先,我们将管理Activity的功能通过一个扩展的Application类来实现。
//=================================================================================
public class MyApplication extends Application { private static Stack<Activity> 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<Activity>(); } 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文件中修改一下<Application>的属性( android:name)
例如:
//=================================================================================1 <application2 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 @Override10 protected void onDestroy(){11 super.onDestroy();12 //结束Activity&从栈中移除该Activity13 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的管理方法以及其他全局变量的操作。
- Android设计模式]Android退出应用程序终极方法
- [Android设计模式]Android退出应用程序终极方法
- [Android设计模式]Android退出应用程序终极方法
- [Android设计模式]Android退出应用程序终极方法
- [Android设计模式]Android退出应用程序终极方法
- [Android设计模式]Android退出应用程序终极方法
- [Android设计模式]Android退出应用程序终极方法
- [Android设计模式]Android退出应用程序终极方法
- Android退出应用程序终极方法
- Android退出应用程序方法
- Android应用程序退出方法
- 终极退出android程序的方法
- android应用程序完全退出方法
- Android 应用程序退出的四种方法
- Android完全退出应用程序的方法
- android 多界面应用程序退出的方法
- Android之完美退出应用程序的方法
- Android经典完美退出应用程序的方法
- 定一个属于我自己的"小目标"
- ffmpeg使用一:录屏保存为yuv420p
- 如何彻底修改Eclipse中项目名称
- Java Map浅谈(jdk1.7)
- Linux根据关键字批量杀进程
- [Android设计模式]Android退出应用程序终极方法
- 玩转Android之手摸手教你DIY一个抢红包神器!
- 图解 Maven 安装配置 (win7 64bit)
- 冒泡排序
- 八皇后问题
- 随笔
- android demo(一):跟随手指的小球
- Android学习记录(二十九)-- 旋屏不触发activity oncreate重复加载的方法。
- 2016/10 Windows10更新后VC++ 6.0不能使用 解决方法