2015-05-12 41 views
0

我是新來的android和我有一個問題 我使用相同的代碼重複和延遲兩個類的方法。一門課好,但其他課不好。我不知道爲什麼。這是我的代碼Android:重複一個方法,延遲x秒後使用其他方法

SpeedMeterFragment.java

public class SpeedMeterFragment extends Fragment { 
    .... 
    public void speedMeterBefore() { 
     totalRxBytesBefore = TrafficStats.getTotalRxBytes(); 
     Log.d("test", "Before: " + String.valueOf(totalRxBytesBefore)); 
    } 

    public void speedMeterAfter() { 
     totalRxBytesAfter = TrafficStats.getTotalRxBytes(); 
     Log.d("test", "After: " + String.valueOf(totalRxBytesAfter)); 
    } 

    public void speedMeterDifference() { 
     totalRxBytesDifference = totalRxBytesAfter - totalRxBytesBefore; 
     tvTest.setText(String.valueOf(totalRxBytesDifference/1024) + " kb/s"); 
     Log.d("test", "Difference: " + String.valueOf(totalRxBytesDifference)); 
    } 

    public void speedMeter() { 
     handler = new Handler(); 
     handler.post(runnable = new Runnable() { 

      @Override 
      public void run() { 
       speedMeterBefore(); 
       final Handler handler1 = new Handler(); 
       handler1.postDelayed(new Runnable() { 

        @Override 
        public void run() { 
         speedMeterAfter(); 
         speedMeterDifference(); 
        } 
       }, 1000); 
       handler.postDelayed(this, 1000); 
      } 
     }); 
    } 
} 

SaveDataUseage.java

public class SaveDataUseage extends BroadcastReceiver { 
    ... 

    public void onReceive(Context context, Intent intent) { 
     ... 
     savePreference(); 
    } 

    public void savePreference() { 
     ... 
     measureDataMB();   
    } 

    public void measureDataMBBefore() { 
     dataMBBefore = TrafficStats.getTotalRxBytes()/1048576; 
    } 

    public void measureDataMBAfter() { 
     dataMBAfter = TrafficStats.getTotalRxBytes()/1048576; 
    } 

    public void measureDataMBDifference() { 
     dataMBDifference = dataMBAfter - dataMBBefore; 
    } 

    public void measureDataMB() { 
     handler = new Handler(); 
     handler.post(runnable = new Runnable() { 

      @Override 
      public void run() { 
       measureDataMBBefore(); 
       final Handler handler1 = new Handler(); 
       handler1.postDelayed(new Runnable() { 

        @Override 
        public void run() { 
         measureDataMBAfter(); 
         measureDataMBDifference(); 
        } 
       }, 1000); 
       handler.postDelayed(this, 1000); 
      } 
     }); 
    } 
} 

SpeedMeterFragment做工精細,但不SaveDataUseage 有人幫幫我嗎? 對不起,我英文不好:)

+1

你能解釋的處理程序中處理程序? – Blackbelt

+0

您是否嘗試過記錄接收器是否被激活?它是否達到了measureDataMB()函數? – Knossos

+0

這就是我的意思:method1重複每1秒,在method1內部有method2和method3在方法2後1秒後執行,稱爲 – TheLegions

回答

0
handler = new Handler(); 

final Runnable r = new Runnable() { 
    public void run() { 

//Your method called here 
     handler.postDelayed(this, 1000); 
    } 
}; 

handler.postDelayed(r, 1000); 

這個代碼將每秒

+0

我知道,但在我的方法中還有其他方法需要在調用某個方法後延遲x秒執行。 這意味着,方法1每1秒重複一次,方法1內有方法2和方法3在方法2之後1秒後執行,稱爲 – TheLegions

+0

然後您必須編寫一些if else條件。 –

0
handler = new Handler(); 

final Runnable r = new Runnable() { 
    public void run() { 

//Your method called here 

MyMethod(isCalledFromHandeler); 

     handler.postDelayed(this, 1000); 
    } 
}; 

handler.postDelayed(r, 1000); 

使用boolean參數isCalledFromHandeler承認方法的調用後重複方法。
然後用

if(isCalledFromHandeler){ 
// Do Not call the Child Method 

} else{ 

// Call the Child Method 
} 
0

雖然其八個個月大的問題,我也遇到了類似的問題,在我的解決方案擴展HandlerAdvanceHandler與postRepeated方法。

用法示例

AdvanceHandler handler = new AdvanceHandler(); 
handler.postRepeated(new Runnable() { 
      @Override 
      public void run() { 
       //Your repeated task 
      } 
     }, 5000) //After every 5 seconds