如果是直接按home键退到桌面,并没有实际退出整个应用。Activity依然保存在栈中。那么,怎样才能关闭所有activity退出整个应用呢?那么想法当然是用一个集合吧所有的activity保存起来了。那么用什么呢?可以用List.用ArrayList还是用linkedList呢?因为这个List主要用于添加和删除。并不需要提供随机访问。因此,使用linkedList.
我们写一个类,注意这个类要用单例模式:
package cn.com.smartcost.offer.util;
import java.util.LinkedList;
import java.util.List;
import android.app.Activity;
import android.app.Application;
/**
* 主要用于退出整个应用
*
* @date 2014-1-3 10:55:10
*
*/
public class SysApplication extends Application {
private List<Activity> mList = new LinkedList<Activity>();
private static SysApplication instance;
private SysApplication() {
}
public synchronized static SysApplication getInstance() {
if (null == instance) {
instance = new SysApplication();
}
return instance;
}
/**
* 在需要退出的Activity的onCrete()方法
* @param activity
*/
public void addActivity(Activity activity) {
mList.add(activity);
}
public void exit() {
try {
for (Activity activity : mList) {
if (activity != null)
activity.finish();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
System.exit(0);
}
}
public void onLowMemory() {
super.onLowMemory();
System.gc();
}
}
在需要关闭的Activity的onCreate()方法中,使用:
SysApplication.getInstance().addActivity(this);
将activity添加到list中去。
在需要退出的地方:
//捕捉按键
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0){
if(count == 0){
++count; //count+1,到1的时候退出应用
Toast.makeText(LoginActivity.this, "再按一次返回键退出纵横材价",
Toast.LENGTH_LONG).show();
}
if(count == 1){
SysApplication.getInstance().exit();
}
return false;
}
//继续执行父类的其他点击事件
return super.onKeyDown(keyCode, event);
}
注意,system.exit(0)和Activity.finish()有什么不一样呢?
Activity.finish():
当你调用此方法的时候,系统只是将最上面的Activity移出了栈,并没有及时的调用onDestory()方法,其占用的资源也没有被及时释放。因为移出了栈,所以当你点击手机上面的“back”按键的时候,也不会找到这个Activity。
System.exit(0)
这玩意是退出整个应用程序的,是针对整个Application的。将整个进程直接KO掉。
Activity.onDestory()
the system is temporarily destroying this instance of the activity to save space.
系统销毁了这个Activity的实例在内存中占据的空间。
在Activity的生命周期中,onDestory()方法是他生命的最后一步,资源空间什么的都没有咯~~。当重新进入此Activity的时候,必须重新创建,执行onCreate()方法。