[Android]如何做一个崩溃率少于千分之三噶应用app(2)-完全退出App

以下是我这个系列的相关文章,有兴趣可以参考一下,可以给个喜欢或者关注我的文章。

[Android]如何做一个崩溃率少于千分之三噶应用app--章节列表

我建立了一个关于Android架构学习的群,里面可以进一步进行组件化学习的交流。

群号是316556016,也可以扫码进群。我在这里期待你们的加入!!!

[Android]如何做一个崩溃率少于千分之三噶应用app(2)-完全退出App_第1张图片


在这里先提一个问题,你是否考虑过在App里面加入自定义的栈来管理Activity?为何需要这样管理Activity呢?

很多人会想到Activity本来不就已经有栈管理的方式啦,有可以自定义它启动排列的规则,例如standard,singleTop,singleTask等。那自定义管理Activity的在于哪里呢?

如果你只是考虑想要如何完全退出栈内的全部Activity的话,这编文章应该是需要的。

我们很多情况下想完全退出App,会做一个自定义的栈来管理相应的Activity。

但是条条大路通罗马,完全退出App,并不一定需要自定义的栈来作管理。


这里推荐的方法。

1.你需要一个事件总线,例如EventBus,或者你本来工程就有自己写好的事件总线。

2.很多情况下,我们写Activity都会继承一个例如命名为BaseActivity基类,此类里面作一些共性的操作。


看到这里是否有一定的头绪,想到我想如何做?那就继续往下看吧

1.我们先定义一个AppExitEvent的类,用于EventBus的事件传输(如果不清楚EventBus是什么,那就请自己恶补一下吧)

2.在我们的BaseActivity 的onCreate里面注册EventBus,onDestroy里面注销EventBus

注册
注销

3.然后定义一个send的方法

发送AppExitEvent

4.然后定义接收事件,用finish结束Activity

接收事件

这里所有栈内的继承于BaseActivity的Activty都会接收到事件,然后调用finish结束Activity

5.这样App就只会有一个结束出口,想要完全退出程序的时候,只要调用sendExitEvent的方法


这样做的优点,不需要做到用自定义栈去管理Activity,但是能将自己想要信号传送到每一个Activity。

如果我们想要在推出前加入一些操作,例如想发一个广播,需要如何做?

那么我们可以在sendExitEvent里面,发送event前,写一个广播就可以了。


这里确定要完全退出app,还推荐在finish后使用System.exit(0),这样会写提示虚拟机kill掉进程。


*2016.12.09更新

推荐System.exit(0),是为了提示系统的一些缓存也做出退出操作,我曾经遇到过,不使用这个,会出现登录的账号没有完全退出,下次登录会提示账号的问题。


*2018.4.22

此方法还是无法完全退出,EventBus信号的可达顺序是无法预料的,Activity在onDestory会触发栈恢复和从新拉起,导致无法完全退出。


*2018.7.27

如果有第三方的页面,并木有继承到BaseActivity,也无法全局退出。

如果有更加好的建议和想法,欢迎在评论留言。

你可能感兴趣的:([Android]如何做一个崩溃率少于千分之三噶应用app(2)-完全退出App)