0

我正在开发一个滑雪追踪器应用程序,但我在第一个任务中失败了 :) 秒表

这是我的服务:

public class TrackerService extends Service {
    private IBinder mBinder = new TrackerBinder();
    private TimerThread thread;
    private int min =0,sec=0;
    private boolean running = true;

    @Override
    public void onCreate() {
        thread = new TimerThread();
    }

    @Override
    public IBinder onBind(Intent intent) {
        return mBinder;
    }


    public void startTimer(){
        if(!thread.isAlive())
            thread.start();
        else{
            thread.resume();
        }
    }

    public void pauseTimer(){
        thread.suspend();
    }

    public class TrackerBinder extends Binder{
        public TrackerService getService(){
            return TrackerService.this;
        }

    }

    public class TimerThread extends Thread{
        @Override
        public void run() {
            while (running){
                sec++;
                if(sec==60){
                    min++;
                    sec=0;
                }
                try {
                    Thread.sleep(1000);
                }catch(Exception e){}
            }
        }
    }
}

我正在从绑定的活动中调用 startTimer() 和 pauseTimer() 方法,但在恢复时我得到了 java.lang.UnsopportedOperationException。知道如何解决吗?

4

2 回答 2

1

停止线程后,您将无法重新启动它。但是您可以做的是实例化一个新的TimerThread并重新启动它!

喜欢

TimerThread newThread = new TimerThread();
newThread.start();
于 2014-12-23T21:17:35.483 回答
0

永远不要打电话stop()suspend()resume()在线程上。这些方法已被弃用很长时间,javadocs 解释了原因。

您可以做以下两件事之一: 1. 跟踪线程类中的计时器状态;或者2.每次启动定时器时启动一个新线程,然后在停止定时器时退出线程。第二个可能是你想要的。

于 2014-12-23T21:38:30.070 回答