Android 中服务 Class 的结构 - 问题和检查工作

The Structure of a Service Class in Android - Questions and Check Work

我目前正在恢复我一直在做的项目,并从头开始重新创建它。
但是,在创建服务 class 时,我注意到了一些事情 - 在我的旧项目中,服务中名为 onStartCommand 的方法包含所有需要触发的代码,而在我的新项目中,当我创建服务时 class,找不到这个方法

- 我是否需要手动添加此 "onStartCommand" 方法以包含我的服务代码?

- 如果没有,我的代码究竟会去哪里?似乎在我的 "old" 项目代码中,我完全注释块 public TimerService,并将 null 传递给 IBinder,然后创建 onStartCommand 等。我不太明白为什么。

- 当我在这里时,有人可以仔细检查下面我的 CountdownTimer 代码吗?如果它是正确的,我应该把它放在线程中吗?


当我创建一个新服务 Class 时,它看起来像这样:

public class TimerService extends Service {

    public TimerService() {

    }

    @Override
    public IBinder onBind(Intent intent) {
        // TODO: Return the communication channel to the service.
        throw new UnsupportedOperationException("Not yet implemented");

    }

}


但是在我的旧项目中,我的服务 class 看起来像这样:

public class TimerService extends Service {

/*
public TimerService() {

}
*/

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

@Override
public int onStartCommand(final Intent intent, int flags, int startId) {

    intent.getStringExtra("TIMER_VALUE");

    String string_timerValue;
    string_timerValue = intent.getStringExtra("TIMER_VALUE");

    long long_timerValue;
    long_timerValue = Long.parseLong(String.valueOf(string_timerValue));

    // I DO NOT WANT ANY TICK VALUE, SO GIVE IT FULL TIMER VALUE
    long long_tickValue;
    long_tickValue = Long.parseLong(String.valueOf(string_timerValue));

    new CountDownTimer(long_timerValue, long_tickValue) {

        public void onTick(long millisUntilFinished) {
            // DO NOTHING
        }

        public void onFinish() {

            Toast.makeText(TimerService.this, "TIMES UP", Toast.LENGTH_LONG).show();

            stopService(intent);

        }
    }.start();

    return START_STICKY;

    // END OF onStartCommand
}

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

    Toast.makeText(this, "Service Destroyed", Toast.LENGTH_LONG).show();
}

// END OF ENTIRE SERVICE CLASS
}


谢谢!

Do I need to manually ADD this "onStartCommand" method to contain my service code?

是的。

can someone please double-check my CountdownTimer code below?

仅在绝对必要时才创建服务。目前还不清楚为什么需要这项服务。

除此之外:

  • 使用 stopSelf(),而不是 stopService(),从该服务内部停止该服务。

  • 使用 START_STICKY 检查 Intent extras 不是一个好的组合。 START_STICKY 说 "if you terminate my process to free up system RAM, please restart my service when possible, but pass null for the Intent"。这将导致您的服务崩溃 NullPointerException.