您的位置:首页 > 移动开发 > Android开发

android 关闭所有的Activity

2013-10-27 23:26 369 查看
如何退出所有的activity,这个问题估计android初学者都会遇到,当然我也不例外,在朋友的提示下,终于解决了这个问题。对于这个问题的解决方案有两种:一种是发送广播,每个activity接收到广播后,便调用自己的finish()方法;还有一种是让所有的Activity继承一个BaseActivity,在BaseActivity里初始化一个栈,在onResume时把新的Activity加入这个栈,在退出的时候从栈中依次取出每一个Activity然后分别调用finish()并且赋值为null,这样就行了。

第一种:发送广播,代码如下所示:

1.编写一个BaseActivity,所有的activity继承这个BaseActivity。

2.要整体退出时,调用this.closeAllActivity()方法。

BaseActivity代码:

package com.xaut.activity;

import android.app.Activity;

import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

import android.content.IntentFilter;

public class BaseActivity extends Activity {

public static final String ACTION_CLOSS_ACTIVITY = "com.xaut.activity.BaseActivity.finish";

private BroadcastReceiver broadcastReceiver = new BroadcastReceiver(){

@Override

public void onReceive(Context context, Intent intent) {

// 结束窗口

BaseActivity.this.finish();

}

};

@Override

//--activity真正在前台运行中

protected void onResume() {

super.onResume();

// 在当前的activity中注册广播

IntentFilter filter = new IntentFilter();

filter.addAction(ACTION_CLOSS_ACTIVITY);

this.registerReceiver(broadcastReceiver, filter);

}

//Activity has leaked IntentReceiver that was originally registered here.

//Are you missing a call to unregisterReceiver()?

//注册了广播接收器后要在销毁时取消注册,否则会出错。

@Override

protected void onDestroy() {

this.unregisterReceiver(broadcastReceiver);

super.onDestroy();

}

public void closeAllActivity() {

// 发送广播,关闭所有activity

Intent intent = new Intent();

intent.setAction(ACTION_CLOSS_ACTIVITY);

sendBroadcast(intent);//--发送当前的意图

}

}

第二种:构建activity栈,代码如下所示:

1.编写一个BaseActivity,所有的activity继承这个BaseActivity。

2.要整体退出时,调用exit();方法。

package com.xaut.activity;

import java.util.LinkedList;

import android.app.Activity;

import android.os.Bundle;

public class BaseActivity extends Activity {

public static LinkedList<Activity> sAllActivitys = new LinkedList<Activity>();

@Override

protected void onCreate(Bundle bundle) {

super.onCreate(bundle);

sAllActivitys.add(this);

}

@Override

public void onDestroy() {

super.onDestroy();

sAllActivitys.remove(this);

}

public static void finishAll() {

for(Activity activity : sAllActivitys) {

activity.finish();

}

sAllActivitys.clear();

}

public static void exit() {

finishAll();

// 这个主要是用来关闭进程的, 关把所有activity finish

// 的话,进程是不会关闭的

System.exit(0);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: