关闭

Android应用程序退出的一种方案

标签: android应用退出功能
728人阅读 评论(0) 收藏 举报
分类:

思路:把所有Activity 都收集到一个 List<Activity> 链表中,在退出的时候只需要使用for循环遍历一遍链表即可。

首先新建一个SysApplication.java文件

/**
*使用单例保存所有的Activity到链表
*/
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  
    public void addActivity(Activity activity) { 
        mList.add(activity); 
    } 
    //退出App时调用
    public void exit() { 
        try { 
            for (Activity activity : mList) { 
                if (activity != null) 
                    activity.finish(); 
            } 
        } catch (Exception e) { 
            e.printStackTrace(); 
        } finally { 
            System.exit(0); 
        } 
    } 
    //内存不足时直接调用系统的垃圾回收机制
    @Override 
    public void onLowMemory() { 
        super.onLowMemory();     
        System.gc(); 
    } 	
}
然后再每个Activity的Oncreate()方法中调用这里的addActivity()方法,
SysApplication.getInstance().addActivity(this);
这样就将当前的activity加入到链表中了。

下面说一下程序退出,分两种情况:

一种是按一下返回键弹出一个对话框,

public boolean onKeyDown(int keyCode, KeyEvent event) {
		// TODO Auto-generated method stub
		switch (keyCode) {
		case KeyEvent.KEYCODE_BACK:
			showExitAlert();
			break;

		default:
			break;
		}
		return false;
	}

	/**
	 * 确认退出
	 */
	public void showExitAlert() {
		AlertDialog.Builder build = new AlertDialog.Builder(this);
		build.setTitle("警告").setMessage("确定要退出吗?")
				.setPositiveButton("确定", new DialogInterface.OnClickListener() {

					@Override
					public void onClick(DialogInterface dialog, int which) {
						SysApplication.getInstance().exit();

					}
				})
				.setNegativeButton("取消", new DialogInterface.OnClickListener() {

					@Override
					public void onClick(DialogInterface dialog, int which) {
						

					}
				}).show();
	}
另一个种是连续按两次返回键退出程序,

private long mExitTime;
public boolean onKeyDown(int keyCode, KeyEvent event) {
		if (keyCode == KeyEvent.KEYCODE_BACK) {
			if ((System.currentTimeMillis() - mExitTime) > 2000) {
				Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show();
				mExitTime = System.currentTimeMillis();

			} else {
				SysApplication.getInstance().exit();
			}
			return true;
		}
		return super.onKeyDown(keyCode, event);
	}





0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:77939次
    • 积分:1203
    • 等级:
    • 排名:千里之外
    • 原创:31篇
    • 转载:51篇
    • 译文:0篇
    • 评论:16条