【发布时间】:2019-06-27 14:18:35
【问题描述】:
我在片段内 Searchview 的 Textchanged 事件中使用 System.Threading.Timer。
System.Threading.Timer _timer;
private void SearchView_QueryTextChange(object sender, Android.Support.V7.Widget.SearchView.QueryTextChangeEventArgs e)
{
_timer.Change(300, Timeout.Infinite);
...
...
}
public override void OnResume()
{
_timer = new System.Threading.Timer(MyCallBack);
base.OnResume();
}
public override void OnPause()
{
_timer.Dispose();
base.OnPause();
}
我在调用 onResume 时实例化计时器,并在调用 onPause 时释放(释放资源)它。 问题是,如果我单击“主页”按钮,计时器将被释放(onPause),但在再次单击应用程序后,不会调用 onResume。当我尝试在 searchView 中输入时,计时器被释放。
我应该在 Fragment 的哪个方法中实例化非托管资源(onstart、oncreateview、onResume...)以及何时释放它(onStop、onpause、onDestroy...),所以我不会创建多个计时器(泄漏)? 正确的方法是什么?
【问题讨论】:
-
onStart/onStop 是一个更安全的选择,尽管它取决于你的计时器在做什么。如果将应用程序置于后台,它应该停止吗?因为如果不是,那么
onViewCreated/onDestroyView. -
@EpicPandaForce 谢谢。当我在搜索视图框中输入时,我使用计时器产生一个小的延迟。它不应该在应用不可见后执行。
-
那就是
onStart/onStop
标签: android android-fragments xamarin.android