2012-11-13 5 views
1

내 응용 프로그램에서 처리기를 사용하여 날짜와 시간을 업데이트하고 있습니다. 날짜는 &이지만 정확한 결과는 제공되지 않습니다. 60 초 후에 업데이트하도록 설정하면 62 초 후에 업데이트됩니다. 120 초로 업데이트하면 2 분 2 초 후에 업데이트됩니다. 왜 더 많은 시간을 이야기하고 있는지 도와주세요. 내 코드는 다음처리기가 정확한 시간 간격을주지 않음

public static String interval = "60"; 

     Handler h2 = new Handler(); 
    Runnable run = new Runnable() { 
     @Override 
     public void run() { 
      MyLocation loc = new MyLocation(getBaseContext()); 
      TextView longitude_view = (TextView) findViewById(R.id.GPS_Long_txta); 
      ((TextView) longitude_view) 
        .setText(" " + String.valueOf(loc.gps_lon)); 
      TextView latitude_view = (TextView) findViewById(R.id.GPS_Lat_txta); 
      ((TextView) latitude_view).setText(" " + String.valueOf(loc.gps_lat)); 
      long delaytime = (RestoreRecord0()*1000); 
      last_update_time_txtbx = (TextView) findViewById(R.id.last_update_time_txt); 
      last_update_time_txtbx.setText(" " 
        + String.valueOf(java.text.DateFormat.getDateTimeInstance() 
          .format(Calendar.getInstance().getTime()))); 
      tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); 
      String response = CallWebService(tm.getDeviceId(), loc.gps_lon, loc.gps_lat); 
      h2.postDelayed(this, delaytime); 
     } 
    }; 

것은 RestoreRecord0

public int RestoreRecord0() { 
     try { 

      File dir = getFilesDir(); 
      File file = new File(dir, Saveinterval); 
      if (!file.exists()) { 
       return Integer.parseInt(interval); 
      } 

      FileInputStream fileIS = new FileInputStream(file); 
      BufferedReader buf = new BufferedReader(new InputStreamReader(
        fileIS)); 
      String readString = new String(); 
      String data = ""; 
      // just reading each line and pass it on the debugger 

      while ((readString = buf.readLine()) != null) { 
       data += readString; 
      } 

      return Integer.parseInt(data); 
     } 

     catch (Exception ex) { 
      ex.getMessage(); 
     } 

     return Integer.parseInt(interval); 
    } 

가 친절하게 도움이 방법을이다. 정기적이고 정확한 간격으로 시간을 업데이트하는 방법은 무엇입니까?

+0

'RestoreRecord0()'의 값이 무엇입니까? Runnable이 완료되는 데 걸리는 시간을 계산 했습니까? 마지막으로 실행 지연을 제거하기 위해'postAtTime()'을 시도 했습니까? RestoreRecord0()의 – Sam

+0

사용자가 설정 한 간격의 값을 저장합니다. – Mickel

+0

여기서 나는 postAtTime()을 사용합니다. h2.postDelayed 이후 (this, delaytime) ????? – Mickel

답변

0

잘못하고 당신이 정말로 그것을 실시간으로 업데이트하기 때문에 되길 원한다면 원하는 결과를 충족하지 않습니다 여러 가지가 있습니다 : 일부 지연 바인딩 된 Handler을 통해 발생

  1. 모든 업데이트 - 고유 프레임 워크 코드로 인해
  2. handler 코드가 너무 복잡합니다. 제발 간단하게. 내가 핸들러 측에 추천 할 수 있습니다 무엇

: 모든 findViewById 등을 수행하는 대신

  1. 는 - 참조가 alrady 준비 및 단지도 제거하는 것을 의미 모든 텍스트 뷰
  2. setText을 파일 조작 - 확실하지 않은데, 그것이 정말로 도움이되는 방법, 오랜 시간 동안 지속되기를 원하지 않는다면; 다음 handler.sendMessage은 당신이 사용자 정의 DataModel로 설정하고 업데이트 시간을 통과 할 수있는, 2 개 Object 유형이 사용 - 훨씬 더 효율적 너무
관련 문제