一.使用RxBus监听:
原理:在BaseActivity 中都初始化RxBus,同时监听某种事件,当接收到这个事件的时候,就finish();————>其实就是类似广播监听事件
代码:
ublic class BaseActivity3 extends AppCompatActivity {
Subscription mSubscription;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initRxBus();
}
//接收退出的指令,关闭所有activity
private void initRxBus() {
mSubscription = RxBus.getInstance().toObserverable(Event.class)
.subscribe(event-{
finish();//监听到事件就finish
},
error->{
};
}
@Override
protected void onDestroy() {
super.onDestroy();
if (!mSubscription.isUnsubscribed()) {
mSubscription.unsubscribe();
}
}
}
...
public class Event{
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
RxBus 进行单例
public class RxBus {
private static volatile RxBus mInstance;
private final Subject bus;
public RxBus()
{
bus = new SerializedSubject<>(PublishSubject.create());
}
/**
* 单例模式RxBus
*
* @return
*/
public static RxBus getInstance()
{
RxBus rxBus2 = mInstance;
if (mInstance == )
{
synchronized (RxBus.class)
{
rxBus2 = mInstance;
if (mInstance == )
{
rxBus2 = new RxBus();
mInstance = rxBus2;
}
}
}
return rxBus2;
}
/**
* 发送消息
*
* @param object
*/
public void post(Object object)
{
bus.onNext(object);
}
/**
* 接收消息
*
* @param eventType
* @param <T>
* @return
*/
public <T> Observable<T> toObserverable(Class<T> eventType)
{
return bus.ofType(eventType);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
最后在使用的时候调用:
RxBus.getInstance().post(new Event());
- 1
二.容器式
原理: 创建一个单例容器,里面有Activity栈Stack stack;并创建add,remove,finishAll 方法
在 BaseActivty onCreat 的时候执行add,onDestroy 执行remove ;在我们需要的时候执行finishAll 方法
三.广播式
原理:在BaseActivity中代码注册广播接受者,需要的时候发送一个广播
public class BaseActivity2 extends AppCompatActivity {
private static final String EXITACTION = "action.exit";
private ExitReceiver exitReceiver = new ExitReceiver();
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
IntentFilter filter = new IntentFilter();
filter.addAction(EXITACTION);
registerReceiver(exitReceiver, filter);
}
@Override protected void onDestroy() {
super.onDestroy(); unregisterReceiver(exitReceiver);
}
class ExitReceiver extends BroadcastReceiver {
@Override public void onReceive(Context context, Intent intent) {
BaseActivity2.this.finish();
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
SingleTask 方法
原理:将MainActivity 设置成singleTask,根据Activity的启动特性,singTask 的MainActivity只要一出现,就没有其他的Activity存在了,所以在MainActivity退出即可
SingleTask 改进版
依然设置MainActivity的启动方式
android:launchMode="singleTask"
- 1
重写onNewIntent()
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
if (intent != ) {
boolean isExit = intent.getBooleanExtra(TAG_EXIT, false);
if (isExit) { this.finish();
}
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
不管以什么方式启动的MainActivity ,都会调用onNewIntent 方法,所以我们使用
Intent intent = new Intent(this,MainActivity.class); intent.putExtra(MainActivity.TAG_EXIT, true);
startActivity(intent);
- 1
- 2
的时候就会退出app;
<link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/markdown_views-ea0013b516.css">
</div>