如何检测视图的父活动是否被销毁

时间:2010-06-30 08:43:36

标签: android view callback android-activity

我希望在活动被销毁时在视图中进行一些清理。当活动被销毁时,有没有办法在View中获得回调?我尝试使用onDetachedFromWindow,但我不确定这是否正确。

3 个答案:

答案 0 :(得分:7)

如果要在不必重载View.onDetachedFromWindow()方法的情况下获得回调,可以使用View.addOnAttachStateChangeListener()方法,该方法将回调侦听器作为单个参数。

答案 1 :(得分:1)

了解到无法保证调用onDestroy,您可以在活动onDestroy方法中回调您的视图。

编辑以回应评论: 您可以通过在布局中为其指定id并调用findViewById来获取任何视图。这是一个例子:

Layout.xml(仅显示最低限度)

<LinearLayout>
  <com.example.superwidget.DropDownTouchEnabledListView
    android:id="@+id/special_list_view" />
</LinearLayout>

MyActivity.java(再次,最小化并假设适当的导入)

@Override
void onDestroy() {
    DownTouchEnabledListView v = (DownTouchEnabledListView)findViewById(R.id.special_list_view);
    v.doCallback(with, parameters);
}

答案 2 :(得分:0)

由于View包含Context,因此我使用LocalBroadcastManager。到目前为止,我还没有遇到任何问题。

View正在收听destroy event filterActivity然后只需要广播destroy event

// On View `setup` function
LocalBroadcastManager.getInstance(context).registerReceiver(receiver, filter)

// On Activity
override fun onDestroy() {
    super.onDestroy()
    LocalBroadcastManager.getInstance(this).sendBroadcast(intent)
}

一旦销毁事件触发,别忘了注销event filter

presenter.destroy() // Your clean-up code here
LocalBroadcastManager.getInstance(this).unregisterReceiver(receiver)

您可以在此处找到有关LocalBroadcastManager的更多详细信息: