2016-08-20 4 views
1

ハンドラに関する問題が発生しました。特に、デバイスロックとアンロックをそれぞれ行うとき、または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); 
    } 
} 

は、事前にありがとうございました。

答えて

1

同じ問題があります。しかし、問題は、アプリケーションの起動時および一時停止したアクティビティの再開時にonResumeが呼び出されるというテキストビューではありません。 Idは、canRunのようなブール値を設定することをお勧めします。falseの場合、ハンドラはポストしません。それが本当であれば、ハンドラはそれが喜んで投稿しキャンセルすることができます。私はこれが助けて、私は道を離れないといい。

+0

私はこのメソッドを試してみましたが、画面をロックしてロックを解除する必要があるときにうまく動作しますが、OnPause()コールバックの後でアプリケーションを開いたときにはうまくいきません。 –

+0

@gymnif私は完全にアンダーアンダーです。画面をロックし、ロックを解除したときに再開するときに、ハンドラを停止したいと思っていますか? –

+0

はい、アプリケーションから出て数秒後に再び入力したときにこのハンドラまたはハンドラを停止します(別のアプリケーションを使用するためにOnPauseが呼び出されたとき) –

関連する問題