再议Android2.2应用完全退出

本文详细介绍了如何通过自定义Application、添加权限、管理Activity生命周期等手段,实现Android2.2环境下应用程序的完全退出,包括销毁所有Activity、Application,返回桌面,并确保下一次启动时统一入口和初始化操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在查找了很多资料和长期的实践之后。
总结出了一套确实可行的Android2.2完全退出应用的方法。
先说明一下,我需要达到的效果:

1,所有Activity被销毁。
2,Application被销毁。
3,退回手机桌面。
4,再次进入系统时,必须由统一的入口进入,完成程序必要的初始化操作。

[color=red]开始正文,按顺序讲解需要实现代码[/color]

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被销毁。
经测试,这三个步骤缺一不可。否则不能达到预期的需求。

[color=red]lagunarock原创文章,欢迎转载,转载请注明原文作者及文章url。[/color]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值