gpt4 book ai didi

android - 使用 Handler 发布两次操作

转载 作者:行者123 更新时间:2023-11-30 01:04:02 27 4
gpt4 key购买 nike

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

提前致谢。

最佳答案

我遇到了同样的问题。然而,问题不在于 TextView ,而是在应用程序启动时以及暂停的 Activity 恢复时调用 onResume。我建议设置一个像 canRun 这样的 bool 值,如果设置为 false,处理程序将不会发布。如果它是真的,处理程序可以随意发布和取消。我希望这会有所帮助,而且我不会偏离。

关于android - 使用 Handler 发布两次操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39058028/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com