欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

再议Android2.2应用完全退出 applicationactivitymanifestandroid2android 

程序员文章站 2022-05-23 09:06:05
...
在查找了很多资料和长期的实践之后。
总结出了一套确实可行的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。