我们在做app的时候总是会有一个注销的功能就是退出整个应用程序,那么怎么才能做到退出整个应用程序呢,一个思路上用一个List集合来管理这些Activity,另一个思路就是在我们需要退出的时候给每一个Activity发送一个广播,finish掉页面。
今天就来说一下第一种实现方式:借鉴郭神的思路
解决思路很简单,只需要用一个专门的集合类对所有的活动进行管理就可以了,下面我们就来实现以下。
新建一个ActivityCollector类作为活动管理器,代码如下所示
public class ActivityCollector { private static final String TAG = "ActivityCollector"; public static List<Activity> activities=new ArrayList<>(); //添加Activity public static void addActivity(Activity activity) { activities.add(activity); Log.i(TAG, "addActivity: SIZE-->"+activities.size()); } //移除某个Activity public static void removeActivity(Activity activity) { activities.remove(activity); Log.i(TAG, "removeActivity: SIZE-->"+activities.size()); } //关闭所有的Activity public static void finishAll() { for(Activity activity:activities) { if(!activity.isFinishing()) { activity.finish(); } } } }在活动管理器中,我们通过一个List来暂存活动,然后提供了一个addActivity()方法用于向List中添加一个活动,提供了一个removeActivity()方法用于从List中移除活动,最后提供了一个finishAll()方法用于将List中存储的活动全部销毁掉。
接下来修改BaseActivity中的代码,如下所示:
public class BaseActivity extends AppCompatActivity{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //将当前正在创建的活动添加到活动管理器里 ActivityCollector.addActivity(this); } @Override protected void onDestroy() { super.onDestroy(); //将一个马上要销毁的活动从活动管理器里移除 ActivityCollector.removeActivity(this); } }在onCreate()方法中调用了 ActivityCollector.addActivity(this)方法,表明将当前正在创建的活动添加到活动管理器里。然后在onDestory()中调用了ActivityCollector.removeActivity(this)方法,表明将一个马上要销毁的活动从活动管理器里移除。
从此以后,不管你想在什么地方退出程序,只需要调用ActivityCollector.finishAll()方法就可以了。
public class SeconeActivity extends BaseActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_secone); findViewById(R.id.btn2).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent=new Intent(SeconeActivity.this,ThirdActivity.class); startActivity(intent); } }); } }
public class ThirdActivity extends BaseActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_third); findViewById(R.id.btn3).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ActivityCollector.finishAll(); //杀掉当前进程 android.os.Process.killProcess(android.os.Process.myPid()); } }); } }当然你还可以在销魂所有活动的代码后面在加上杀掉当前进程的代码,以保证程序完全退出,杀掉进程的代码如下:
android.os.Process.killProcess(android.os.Process.myPid());
其中,killProcess()方法用于杀掉一个进程,它接收一个进程id的参数,我们可以通过myPid()方法获得当前程序的进程id,
需要注意的是:killProcess()方法只能用于杀掉当前程序的进程,我们不能使用这个方法去杀掉其他程序。