当Activity被销毁时,我希望在View中进行一些清理工作。有没有办法在Activity销毁时,在View中获取回调?我尝试使用onDetachedFromWindow
,但我不确定这是否正确。
当Activity被销毁时,我希望在View中进行一些清理工作。有没有办法在Activity销毁时,在View中获取回调?我尝试使用onDetachedFromWindow
,但我不确定这是否正确。
如果您想要在不过载 View.onDetachedFromWindow()
方法的情况下获得回调,您可以使用 View.addOnAttachStateChangeListener()
方法,并将回调侦听器作为单个参数传递。
在理解onDestroy方法不能保证被调用的前提下,你可以在Activity的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);
}
由于View
包含Context
,因此我使用LocalBroadcastManager
。到目前为止,我还没有遇到任何问题。
View
正在监听destroy event filter
。然后,Activity
只需要广播destroy event
即可。
// On View `setup` function
LocalBroadcastManager.getInstance(context).registerReceiver(receiver, filter)
// On Activity
override fun onDestroy() {
super.onDestroy()
LocalBroadcastManager.getInstance(this).sendBroadcast(intent)
}
不要忘记在触发销毁事件后取消注册 事件过滤器
。
presenter.destroy() // Your clean-up code here
LocalBroadcastManager.getInstance(this).unregisterReceiver(receiver)
您可以在这里找到有关LocalBroadcastManager
的更多详细信息:
findViewById()
,获取小部件,将其转换为适当的类,并在其上调用方法。话虽如此,对我来说,“onDetachedFromWindow()”似乎是一个合理的选择。 - CommonsWareonDetachedFromWindow()
。 - CommonsWare