Android 应用退出的两种方法

来源:互联网 发布:数据科学考研科目 编辑:程序博客网 时间:2024/06/05 18:22

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);
0 0
原创粉丝点击