android中对活动的引用和对类的引用之间的区别

android中对活动的引用和对类的引用之间的区别,android,android-intent,android-activity,arraylist,Android,Android Intent,Android Activity,Arraylist,我有一个聊天盒的ArrayList,它是一个扩展活动的类 我的问题是,如果系统杀死我的聊天盒活动的一个实例,如果我使用我对聊天盒类的引用来尝试用我通过处理程序发送的文本更新ui,会发生什么情况?您将得到DeadObjectException…。。除此之外,您还将泄露整个活动。任何存储超出活动生命周期的上下文的对象(例如视图和位图)都将导致其不被GC'ed 我想你的应用程序本质上是非常异步的,你无法判断活动何时停止。在本例中,请查看WeakReference,作为存储活动引用的一种方法。这样,如果

我有一个聊天盒的ArrayList,它是一个扩展活动的类


我的问题是,如果系统杀死我的聊天盒活动的一个实例,如果我使用我对聊天盒类的引用来尝试用我通过处理程序发送的文本更新ui,会发生什么情况?

您将得到DeadObjectException…

。。除此之外,您还将泄露整个活动。任何存储超出活动生命周期的
上下文的对象(例如
视图
位图
)都将导致其不被GC'ed

我想你的应用程序本质上是非常异步的,你无法判断活动何时停止。在本例中,请查看
WeakReference
,作为存储活动引用的一种方法。这样,如果android决定停止它,它将成功解除分配它,在搞糟之前,您将能够在聊天框中判断该活动是否活动:

WeakReference<Activity> myWeakActivity=new WeakReference(realActivity);
.
.
Activity myActivity=myWeakActivity.get();
if (myActivity==null) {
    // Activity not active for whatever reason. 
}
WeakReference myWeakActivity=新的WeakReference(realActivity);
.
.
活动myActivity=myWeakActivity.get();
如果(myActivity==null){
//无论出于何种原因,活动都不活跃。
}

您可以尝试在纵向和横向之间进行多次更改(这将重新启动活动)。仔细查看您的堆大小。如果你正在泄漏视图,你会看到它一直在增长&直到它最终消亡。

系统杀死你的聊天盒活动实例是什么意思?你的意思是用户强制关闭应用程序吗?不,我的意思是当系统开始耗尽内存时,它会杀死后台活动或堆栈中较低的活动