欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

退出多个Activity的方法,退出多个activity

来源: javaer 分享于  点击 44299 次 点评:225

退出多个Activity的方法,退出多个activity


退出多个Activity的方法很多,这里主要介绍两种主要的,也是我们常用的方法,第一种:用ArrayList集合记录每一个activity,然后for循环一个一个干掉。 第二种:发送广播的方式。


一、用list保存activity实例,然后逐一干掉。

     代码如下:

import java.util.LinkedList;
import java.util.List;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Application;
import android.content.DialogInterface;
import android.content.Intent;

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;
	}

	// add 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);
		}
	}

	@Override
	public void onLowMemory() {
		super.onLowMemory();
		System.gc();
	}
}


     然后在每一个Activity中都要添加以下的代码

 public void onCreate(Bundle savedInstanceState) {
	 super.onCreate(savedInstanceState);
	 SysApplication.getInstance().addActivity(this);
 }

      在需要退出程序的时候,调用:
         SysApplication.getInstance().exit();
         SysApplication.getInstance().exit();
    简而言之,通过单例模式把每个Activity 的引用添加到一个全局链表中,每次退出程序调用System.exit(0)时,先调用链表中Activity 的finish方法。



二、发送广播的方式:

       代码如下:

public abstract class EnterActivity extends BaseActivity {
...
// 写一个广播的内部类,当收到动作时,结束activity
	private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
		@Override
		public void onReceive(Context context, Intent intent) {
		unregisterReceiver(this); // 这句话必须要写要不会报错,不写虽然能关闭,会报一堆错
		((Activity) context).finish();
	}
};

	@Override
	public void onResume() {
		super.onResume();

		// 在当前的activity中注册广播
		IntentFilter filter = new IntentFilter();
		filter.addAction(Attribute.PAGENAME);
		registerReceiver(this.broadcastReceiver, filter); // 注册
	}


public void close() {
	Intent intent = new Intent();
	intent.setAction(Attribute.PAGENAME); // 说明动作
	sendBroadcast(intent);// 该函数用于发送广播
	finish();
	}
...
}

注意unregisterReceiver这个方法必须要加,不然会出现一堆的错!


当然还有通过抛出异常、递归退出,不过这些方法会出现问题,所以就不介绍了。


相关文章

    暂无相关文章
相关栏目:

用户点评