2012-11-13 61 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

有許多東西是不正確的,將不符合預期的結果,如果你真的希望它是實時更新的,因爲:

  1. 通過Handler這種情況發生開往一些延遲所有更新 - 由於固有的框架代碼
  2. 您的handler代碼太混亂了。請簡化它。

我可以在處理器方面建議:

  1. 做所有findViewById等代替 - 有引用alrady準備,只是做的所有文本視圖
  2. 這也意味着,除去setText文件操作 - 不確定,它如何幫助,如果你不希望它持續很長時間;然後用handler.sendMessage它有2種Object類型,在這裏你可以將任何自定義的DataModel並通過更新時間 - 更有效的太
相關問題