Android 应用退出的两种方法

本文详细介绍了如何在Android应用中通过全局管理Activity对象列表来实现活动管理,并提供了一种优雅退出应用的方法,包括手动调用onTerminate()、使用广播接收器关闭所有组件以及在基类中注册广播以实现统一退出应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.

通过在Application中创建一个list进行管理

public class MyApplication extends Application {

// activity对象列表,用于activity统一管理
private List<Activity> activityList;
private static MyApplication myApplication = null;


@Override
public void onCreate() {
super.onCreate();
myApplication = this;
activityList = new ArrayList<Activity>();
}


private MyApplication(){

}

public static MyApplication getApplication(){
return myApplication;
}
// activity管理:从列表中移除activity,按回退建时可单独调用
public void removeActivity(Activity activity) {
if (activityList.contains(activity))
activityList.remove(activity);
}
// activity管理:添加activity到列表
public void addActivity(Activity actClass) {
if (!activityList.contains(actClass))
activityList.add(actClass);
}
// activity管理:结束所有activity
public void finishAllActivity() {
for (Activity activity : activityList) {
if (null != activity) {
activity.finish();
}
}
}

@Override
public void onTerminate() {
super.onTerminate();
finishAllActivity();
android.os.Process.killProcess(android.os.Process.myPid());    //获取PID 
    System.exit(0);
}
}



在我们需要退出程序的时候执行下面代码:

手动调用 onTerminate()即可


另外,程序的activity基类如BaseActivity的两个方法中分别调用:


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MyApplication.getApplication().addActivity(this);
}


@Override
protected void onDestroy() {
super.onDestroy();
MyApplication.getApplication().removeActivity(this);
}


  2.  推荐用广播的方式去关闭整个应用程序,思路就是为所有的Activity创建一个父类,只要在父类中注册一个自定义关闭应用广播即可实现,仔细想了一下这个方法是可行的,只要在基类中动态注册一个广播就可实现这个功能.

代码如下

ExitAppReceiver:
package com.example.appexitdemo;
import android.app.Activity;
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.support.v4.app.FragmentActivity;
//自定义一个广播接收器,用来接收应用程序退出广播.
public class ExitAppReceiver extends BroadcastReceiver {
 @Override
 public void onReceive(Context context, Intent intent) {
  if (context != null) {
   if (context instanceof Activity) {
    ((Activity) context).finish();
   } else if (context instanceof FragmentActivity) {
    ((FragmentActivity) context).finish();
   } else if (context instanceof Service) {
    ((Service) context).stopSelf();
   }
  }
 }
}

BaseActivity:
package com.example.appexitdemo;
import android.app.Activity;
import android.content.IntentFilter;
import android.os.Bundle;
//应用程序中所有Activity的基类
public class BaseActivity extends Activity {
 private ExitAppReceiver exitReceiver = new ExitAppReceiver();
 // 自定义退出应用Action,实际应用中应该放到整个应用的Constant类中.
 private static final String EXIT_APP_ACTION = "com.micen.exit_app";
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  registerExitReceiver();
 }
 private void registerExitReceiver() {
  IntentFilter exitFilter = new IntentFilter();
  exitFilter.addAction(EXIT_APP_ACTION);
  registerReceiver(exitReceiver, exitFilter);
 }
 private void unRegisterExitReceiver() {
  unregisterReceiver(exitReceiver);
 }
 @Override
 protected void onDestroy() {
  super.onDestroy();
  unRegisterExitReceiver();
 }
 @Override
 protected void onStart() {
  super.onStart();
 }
 @Override
 protected void onStop() {
  super.onStop();
 }
}


在App退出方法中添加以下发送广播代码即可:
Intent intent = new Intent(); 
intent.setAction(EXIT_APP_ACTION);
sendBroadcast(intent);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值