再议Android2.2应用完全退出 applicationactivitymanifestandroid2android
程序员文章站
2022-05-23 09:06:05
...
在查找了很多资料和长期的实践之后。
总结出了一套确实可行的Android2.2完全退出应用的方法。
先说明一下,我需要达到的效果:
1,所有Activity被销毁。
2,Application被销毁。
3,退回手机桌面。
4,再次进入系统时,必须由统一的入口进入,完成程序必要的初始化操作。
开始正文,按顺序讲解需要实现代码
1,自定义Application,并在Manifest.xml中注册使用。
2,Manifest.xml添加权限
3,自定义Application中定义
整体思路就是,将程序中所有的Activity交给全局性的Application管理。
4,在Activity的生命周期方法中添加如下代码。
在创建时将自身加入到activties,销毁时从activities中移除。
5,完全退出程序时的方法
说明已在注释中。
分三个步骤:
移除所有Activity、跳转至手机Home界面、杀死应用进程并退出,这样可以保证Application被销毁。
经测试,这三个步骤缺一不可。否则不能达到预期的需求。
lagunarock原创文章,欢迎转载,转载请注明原文作者及文章url。
总结出了一套确实可行的Android2.2完全退出应用的方法。
先说明一下,我需要达到的效果:
1,所有Activity被销毁。
2,Application被销毁。
3,退回手机桌面。
4,再次进入系统时,必须由统一的入口进入,完成程序必要的初始化操作。
开始正文,按顺序讲解需要实现代码
1,自定义Application,并在Manifest.xml中注册使用。
<application android:name=".app.CustomApplication"> <!--ellipsis--> </application>
2,Manifest.xml添加权限
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES"/>
3,自定义Application中定义
/** 保存所有已创建的Activity */ private List<Activity> activities; /** 初始化 */ if ( activities == null ) { activities = new Vector<Activity>(); } /**将Activity加入*/ public synchronized void register(Activity activity) { activities.add(activity); } /**Activity被销毁时,从Activities中移除*/ public synchronized void unregister(Activity activity) { if ( activities.size() != 0 ) { activities.remove(activity); if ( !activity.isFinishing() ) { activity.finish(); } } else { Debug.l("No Activity in pool! unregister"); } } /** * 移除当前所有已创建的Activiy, * 并逐个销毁 * * @author ashtray * @creaetime 2011-8-10 下午01:46:36 */ public synchronized void removeAll() { if ( activities.size() != 0 ) { Activity activity = null; Iterator<Activity> iterator = activities.iterator(); while (iterator.hasNext()) { activity = iterator.next(); if ( !activity.isFinishing() ) { activity.finish(); iterator.remove(); } } } else { Debug.l("No Activity in pool!"); } }
整体思路就是,将程序中所有的Activity交给全局性的Application管理。
4,在Activity的生命周期方法中添加如下代码。
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 获取Application app = (CustomApplication) getApplication(); app.register(this); } @Override protected void onDestroy() { app.unregister(this); super.onDestroy(); }
在创建时将自身加入到activties,销毁时从activities中移除。
5,完全退出程序时的方法
/** * 完全退出本应用程序 * * @author ashtray * @creaetime 2011-8-26 上午11:21:29 * @param app */ public static void exit(CustomApplication app) { /** 执行完全退出程序的操作 */ // 清除所有已创建的Activity app.removeAll(); System.gc(); // 跳转至home界面 Intent home = new Intent(Intent.ACTION_MAIN); home.addCategory(Intent.CATEGORY_HOME); home.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); app.getApplicationContext().startActivity(home); // 销毁程序进程,并退出 Process.killProcess(Process.myPid()); System.exit(10); }
说明已在注释中。
分三个步骤:
移除所有Activity、跳转至手机Home界面、杀死应用进程并退出,这样可以保证Application被销毁。
经测试,这三个步骤缺一不可。否则不能达到预期的需求。
lagunarock原创文章,欢迎转载,转载请注明原文作者及文章url。
上一篇: 如何把应用安装到sd卡中