我遇到了处理程序的一些问题。特别是,当我分别转动设备锁定和解锁,或者调用OnPause()和OnResume()时,我需要停止并恢复回调。我将handler.Post(action)
和handler.RemoveCallbacks(action)
放在OnPause()和OnResume()中,但它们无法正常工作。实际上,当我退出并再次进入我的应用程序时,似乎handler.Post(action)
被调用两次,因为TextView的更新变得比平时更快。此外,当我锁定或解锁设备时会发生同样的事情。我不知道如何解决这个问题。
这是我的代码:
public class MainActivity : Activity
{
int count = 1;
TextView text;
Handler handler;
myrunnable runnable;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
// Set our view from the "main" layout resource
SetContentView(Resource.Layout.Main);
// Get our button from the layout resource,
// and attach an event to it
text = FindViewById<TextView>(Resource.Id.textView1);
handler = new Handler();
runnable = new myrunnable(text, handler);
}
protected override void OnResume()
{
handler.Post(runnable.Run);
base.OnResume();
}
protected override void OnPause()
{
handler.RemoveCallbacks(runnable.Run);
base.OnPause();
}
}
public class myrunnable : Java.Lang.Object, IRunnable
{
int i;
TextView text;
Handler handler;
public myrunnable() { }
public myrunnable(TextView text, Handler handler)
{
this.handler = handler;
this.text = text;
i = 0;
}
public IntPtr Handle
{
get
{
return (IntPtr) 0;
}
}
public void Dispose()
{
}
public void Run()
{
i++;
text.Text = i.ToString();
if (i < 100)
handler.PostDelayed(Run, 1000);
}
}
提前谢谢你。
答案 0 :(得分:1)
我有同样的问题。然而,问题不在于文本视图,即当应用程序启动时以及恢复挂起的活动时调用onResume。我建议设置像canRun这样的布尔值,如果设置为false,则处理程序不会发布。如果它是真的,处理程序可以随意发布和取消。我希望这有帮助,而且我不会离开。