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);
}
}
第一种:发送广播,代码如下所示:
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);
}
}
相关文章推荐
- 关闭android程序里所有的activity
- android实现退出时关闭所有activity
- Android 退出程序时关闭所有的activity的几种方法
- android完全退出(关闭所有Activity)
- Android 一次性关闭所有的activity 完全退出应用
- Android退出时关闭所有Activity的方法
- Android开发_通过ExitManager关闭所有activity
- Android 关闭所有的Activity
- android 关闭和管理所有的ACTIVITY或者是SERVICES 或者是广播
- Android关闭所有activity的方法,利用baseActivity
- Android例子—关闭所有Activity_完全退出App的方法
- 关闭android程序里所有的activity
- Android程序有很多Activity,在B中如何关闭整个Android应用程序,关闭所有的 Activity
- 一个面试题引发的思考:Android应用退出时候,关闭所有的Activity
- 关闭android程序里所有的activity 分类: Android Activity 2014-06-22 12:30 131人阅读 评论(0) 收藏
- 关闭android程序里所有的activity
- Android--关闭所有Activity、退出…
- Android--关闭所有Activity、退出应用
- 关闭android程序里所有的activity
- Android 2.2关闭所有Activity完全退出程序方法