4

TimerTask Does Not Run?

 2 years ago
source link: https://www.codesd.com/item/timertask-does-not-run.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

TimerTask Does Not Run?

advertisements

Here is my timer class, This class is designed to constantly update a timer in a view. However, when I run the app the first toast message is displayed to the screen but the second one is never reached (the timerTask's "run" method is never executed). I know that this is probably something simple that I am doing wrong. If anyone could steer me in the right direcion that would be great.

public class MyTimer  { 

static Timer _timerTask = new Timer();
static int totalSeconds = 1, hour = 0, min = 0, sec = 0;
static String mTimeFormat = "%02d:%02d:%02d";
static String timeTakenString;

public static void start (){
    Toast.makeText(GPSMain.context, "Message one", Toast.LENGTH_LONG).show();

    TimerTask timer = new TimerTask() {
        @Override
        public void run() {
            Toast.makeText(GPSMain.context, "Message two", Toast.LENGTH_LONG).show();
            totalSeconds += 1;
            sec += 1;
            if(sec >= 60) {
                sec = 0;
                min += 1;
                if (min >= 60) {
                    min = 0;
                    hour += 1;
                }
            }
            timeTakenString = String.format(mTimeFormat, hour, min, sec);
            postExecute.sendEmptyMessage(0); //update UI
        }
        private Handler postExecute = new Handler(){
            public void dispatchMessage(Message msg) {
                super.dispatchMessage(msg);
                GPSMain.timer.setText("Time Taken: "+timeTakenString);
            }
        };
    };
_timerTask.scheduleAtFixedRate(timer,1000,1000);
}
}

code in another file calling this class:

MyTimer myTimer = new MyTimer();
....
myTimer.start();

PROJECT SPEC CHANGED! My project leader changed the spec of the project so that it no longer needs to update the timer to the UI but rather display it as an end result. Accepting the first answer anyway as it solves the original problem. Will post the new code below.

New code calls:

 System.currentTimeMillis();

at the beggining and end of the runcycle, which returns a long. The first value is then subtracted from the second value to calculate the amount of time taken to execute the runcycle. That value is then manipulated and put into a timer format that is displayed at the end as a string.

public static String getTimeTaken(long end, long start){
    @SuppressWarnings("unused")
    String formattedTime = "", hourHour = "", hourMin = ":", minSec = ":";
    long timeTaken = (end-start)/1000, hour = 0, min = 0, sec = 0;
    if (timeTaken>9 ){
        hourHour = "0";
        hourMin = ":0";
        if (timeTaken>=60){
            if (timeTaken>= 3200){
                hour = timeTaken/3200;
                timeTaken = timeTaken%3200;
                if (hour>9){
                    hourHour = "";
                }
            }
            min = timeTaken/60;
            timeTaken = timeTaken%60;
            if (min >9){
                hourMin = ":";
            }
        }
        sec = timeTaken;
        if(sec%60<10){
            minSec = ":0";
        }
        return formattedTime = (hourHour+hour+hourMin+min+minSec+sec);
    }
    sec = timeTaken;
    minSec = ":0";
    hourMin = ":0";
    hourHour = "0";
    return formattedTime = (hourHour+hour+hourMin+min+minSec+sec);
}


Using thread you cant update your UI for that you have to use runOnUiThread

youractivity.this.runOnUiThread(new Runnable(){public void run(){Toast.makeText(mContext, "Message", Toast.LENGTH_LONG).show();}});




About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK