user3100193
user3100193

Reputation: 561

creating second counter in android eclipse

I'm making simple android app which should have counter which counts from 60 seconds down to 0 seconds. I have one idea how to do it, but I'm not sure if it is the smartest way to do it. And I'm not sure how to make it work in the code.

Idea: In the .xml file I have added textView. I would make MyService class that extends Service which will be called by the .java file inside OnCreate function (because I want that counting starts immediately). MyService will change content of textView every second (I will have int counter which will be decreased every second and then text of textView will be changed).

Is there any better way to do it?

Here is MyService class:

  public class MyService extends Service {

        //for timer:
        int counter = 0;

        static final int UPDATE_INTERVAL = 1000;
        private Timer timer = new Timer();

        @Override
        public IBinder onBind(Intent arg0) {
            return null;
        }


        @Override
        public int onStartCommand(Intent intent, int flags, int startId) {
            doSomethingRepeatedly();
            return START_STICKY;
        }


        private void doSomethingRepeatedly() {
            timer.scheduleAtFixedRate( new TimerTask() {
                public void run() {

                 //code for changing the content

                }
            }, 0, UPDATE_INTERVAL);
        }

        @Override
        public void onDestroy() {
            super.onDestroy();

            //za timer
            if (timer != null){
                timer.cancel();

            }
        }
    }

Do I have to put this code in separate .java file?

I'm not sure how to write code for changing the content of textView, because I'm not sure if I can call id of textView because it is in the separated file?

These would be functions for starting the Services:

 public void startService(View view) {
        startService(new Intent(getBaseContext(), MyService.class));
 }

  public void stopService(View view) {
        stopService(new Intent(getBaseContext(), MyService.class));
    }

Where do I have to put them?

Upvotes: 2

Views: 1099

Answers (1)

Sufiyan Ghori
Sufiyan Ghori

Reputation: 18753

Use a CountDownTimer.

Schedule a countdown until a time in the future, with regular notifications on intervals along the way. Example of showing a 30 second countdown in a text field:

 new CountDownTimer(30000, 1000) {

     public void onTick(long millisUntilFinished) {
         mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);
     }

     public void onFinish() {
         mTextField.setText("done!");
     }
  }.start();

The calls to onTick(long) are synchronized to this object so that one call to onTick(long) won't ever occur before the previous callback is complete. This is only relevant when the implementation of onTick(long) takes an amount of time to execute that is significant compared to the countdown interval.

Upvotes: 3

Related Questions