2017-02-21 9 views
5

페이지를 표시 할 때마다 1 분마다 요청 된 테이블의 데이터를 업데이트해야합니다. 모든 컨트롤러 라이프 사이클 메소드가 적절한 시간에 끝나야하기 때문에이 타이머 로직을 어디에 추가해야할지 모르겠다.Xamarin.iOS에서 타이머를 추가 할 위치는 어디입니까?

어디서 타이머를 넣어야합니까?

+0

:'방법 및 무효화 및'viewWillDisAppear에서 전무로 설정 :'방법. –

+0

viewWillAppear에서 타이머를 시작할 수 있지만 앱이 활성화되지 않은 상태에서이 업데이트가 발생하게하려면 백그라운드 가져 오기를 사용해야하고 iOS에 업데이트 빈도를 알릴 수 있지만 iOS가 업데이트를 허용 할시기를 지정합니다 최신 정보. –

답변

3

페이지를 표시 한 후 1 분마다 요청해야한다고 말하는 것이므로 ViewWillAppear() 메서드에서 타이머를 시작하고 ViewWillDisappear()에서 중지하는 것이 좋습니다. ViewController가 포 그라운드에서 표시 될 때만 실행됩니다. . 메모리 누출을 방지하려면 OnTimedEvent의 바인딩을 해제해야합니다.

당신이 필요로하는 것이거나 좀 더 구체적인 요구 사항이 있습니까?

샘플 코드 : 나는 당신이`viewWillAppear에서 호출 및 예약 타이머해야 할 것 같아요

class MyViewController : UIViewController 
{ 
    public MyViewController(IntPtr handle) 
     : base(handle) 
    { 
    } 

    private Timer timer; 
    private bool timerEventBinded; 

    public override void ViewWillAppear(bool animated) 
    { 
     base.ViewWillAppear(animated); 
     if (timer == null) 
     { 
      timer = new Timer(); 
      timer.Enabled = true; 
      timer.Interval = 60000; 
     } 

     if (!timerEventBinded) 
     { 
      timer.Elapsed += OnTimedEvent; 
      timerEventBinded = true; 
     } 

     timer.Start(); 
    } 

    public override void ViewWillDisappear(bool animated) 
    { 
     if (timer != null) 
     { 
      timer.Stop(); 
      if (timerEventBinded) 
      { 
       timer.Elapsed -= OnTimedEvent; 
       timerEventBinded = false; 
      } 
      timer = null; 
     } 

     base.ViewWillDisappear(animated); 
    } 

    private void OnTimedEvent(Object src, ElapsedEventArgs e) 
    { 
     //do your stuff 
    } 
} 
+0

이 코드가 OP가 찾는 이유에 대한 적절한 추론을 추가하는 것이 좋습니다. 코드 조각을 남겨두고 "이 작품은 나를 위해"라고 말하는 것은 좋은 대답이 아닙니다. – Cheesebaron

+0

@Cheesebaron 물론 추가되었습니다. –

+1

@DavidRiha 앱이 백그라운드에서 작동하지 않습니다. 사용자가 앱을 몇 시간 동안 열어 두지 않을 것으로 예상됩니다. –

관련 문제