Action使用Handler发布了两次

时间:2016-08-20 19:38:42

标签: android xamarin.android

我遇到了处理程序的一些问题。特别是,当我分别转动设备锁定和解锁,或者调用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);
    }
}

提前谢谢你。

1 个答案:

答案 0 :(得分:1)

我有同样的问题。然而,问题不在于文本视图,即当应用程序启动时以及恢复挂起的活动时调用onResume。我建议设置像canRun这样的布尔值,如果设置为false,则处理程序不会发布。如果它是真的,处理程序可以随意发布和取消。我希望这有帮助,而且我不会离开。