Android ui update from handler every second

I need a little help updating my interface from Runnable / Handler every second. I am using this code:

Runnable runnable = new Runnable() { @Override public void run() { handler.post(new Runnable() { @Override public void run() { prBar.setProgress(myProgress); y = (double) ( (double) myProgress/ (double) RPCCommunicator.totalPackets)*100; txtInfoSync1.setText(Integer.toString((int)y) + "%"); prBar.setMax(RPCCommunicator.totalPackets); int tmp = totalBytesReceived - timerSaved; Log.w("","totalBytesReceived : "+totalBytesReceived + " timerSaved : "+timerSaved ); Log.w("","tmp : "+tmp); if (avgSpeedCalc.size() > 10) { avgSpeedCalc.remove(0); } avgSpeedCalc.add(tmp); int x = 0; for (int y=0;y<avgSpeedCalc.size();y++) { x += avgSpeedCalc.get(y); Log.d("","x : "+x); } x = Math.round(x/avgSpeedCalc.size()); Log.e("","x : "+x); timerSaved = totalBytesReceived; txtSpeed.setText(Integer.toString(x)); } }); } }; 

I tried with handler.postDelayed(runnable, 1000); in onCreate() , but runnable never starts. Or even if I try with runnable.run(); It still doesn't work.

Any ideas how I can run runnable / handler and update ui every second?

+6
source share
2 answers

Why are you creating runnable in runnable?

Try the following:

 // flag that should be set true if handler should stop boolean mStopHandler = false; Runnable runnable = new Runnable() { @Override public void run() { // do your stuff - don't create a new runnable here! if (!mStopHandler) { mHandler.postDelayed(this, 1000); } } }; // start it with: mHandler.post(runnable); 
+25
source

If you want to update your interface, I think this is the best option.

 new Handler().postDelayed(new Runnable() { @Override public void run() { //Do your work } },500); 
+1
source

Source: https://habr.com/ru/post/907763/


All Articles