ハンドラに関する問題が発生しました。特に、デバイスロックとアンロックをそれぞれ行うとき、またはOnPause()とOnResume()が呼び出されたときに、コールバックを停止して再開する必要があります。私はhandler.Post(action)
とhandler.RemoveCallbacks(action)
をOnPause()とOnResume()に入れましたが、正しく動作しません。実際には、終了してアプリケーションに再度入力すると、TextViewの更新が通常より速くなるため、handler.Post(action)
が2回呼び出されたようです。また、デバイスをロックまたはロック解除すると同じことが起こります。私はこの問題をどのように解決できるのか分かりません。 これは私のコードです:ハンドラを使用してアクションが2回転記されました
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);
}
}
は、事前にありがとうございました。
私はこのメソッドを試してみましたが、画面をロックしてロックを解除する必要があるときにうまく動作しますが、OnPause()コールバックの後でアプリケーションを開いたときにはうまくいきません。 –
@gymnif私は完全にアンダーアンダーです。画面をロックし、ロックを解除したときに再開するときに、ハンドラを停止したいと思っていますか? –
はい、アプリケーションから出て数秒後に再び入力したときにこのハンドラまたはハンドラを停止します(別のアプリケーションを使用するためにOnPauseが呼び出されたとき) –