关于安卓指定关闭某个activity的事情

时间:2021-01-17 23:52:17
一般情况下我都是使用比较粗暴的办法
public static ButlerDetailsActivity instance = null;
onCreate(){
instance=this;
}
 然后在其他页面调用ButlerDetailsActivity.instance.finish()。

但是这样使用会有泄漏,请问还有没有简单粗暴的办法了

5 个解决方案

#1


写通知或者Eventbus都可以,如果有BaseActivity,也可以在基类里面做栈管理

#2


是广播不是通知

#3


我不认为会泄露,不是说你建立了一个activity静态变量,然后实例化化之后,你难道就认为内存中会多出这么个实例吗?

首先activity初始化的时候,这个实例就已经存在,然后请记住,java中的任何对象变量其本质都只是一个指针,你的这个赋值,其实质只是把你这个变量指向了这个activity实例,在内存里增加的空间只是一个足够存储地址大小的这么一小小小块而已。

其次,你用这种做法也不太好。规范化来说,你可以建立一个ActivityManage类,在里面定义一个Map<String,Activity>来统一存放actvity,这样你就可以完美的操作任何一个已经加入map的activity。然后需要一个BaseActivity,你每一个activity都要继承他,重写其中的onCreate和onDestroy,分别把当前actvity加入和移除在ActivityManage的Map<String,Activity>中。

如此一来,你就可以通过一个ActivityManage完美控制应用中任何一个或部分或全部activity的生死存亡

#4


做个接口,Interface,

#5


使用事件总线( EventBus/ RxBus

本地广播( http://www.jianshu.com/p/f252dcd6220e)

#1


写通知或者Eventbus都可以,如果有BaseActivity,也可以在基类里面做栈管理

#2


是广播不是通知

#3


我不认为会泄露,不是说你建立了一个activity静态变量,然后实例化化之后,你难道就认为内存中会多出这么个实例吗?

首先activity初始化的时候,这个实例就已经存在,然后请记住,java中的任何对象变量其本质都只是一个指针,你的这个赋值,其实质只是把你这个变量指向了这个activity实例,在内存里增加的空间只是一个足够存储地址大小的这么一小小小块而已。

其次,你用这种做法也不太好。规范化来说,你可以建立一个ActivityManage类,在里面定义一个Map<String,Activity>来统一存放actvity,这样你就可以完美的操作任何一个已经加入map的activity。然后需要一个BaseActivity,你每一个activity都要继承他,重写其中的onCreate和onDestroy,分别把当前actvity加入和移除在ActivityManage的Map<String,Activity>中。

如此一来,你就可以通过一个ActivityManage完美控制应用中任何一个或部分或全部activity的生死存亡

#4


做个接口,Interface,

#5


使用事件总线( EventBus/ RxBus

本地广播( http://www.jianshu.com/p/f252dcd6220e)