安卓系统中服务类的结构-问题和检查工作



我目前正在恢复我一直在处理的一个项目,并从头开始重新创建它。
然而,在创建Service类时,我注意到了一些事情-在我的旧项目中,Service中一个名为onStartCommand的方法包含了所有需要激发的代码,而在我的新项目中,当我创建Service类的时候,却找不到这个方法

-我需要手动添加此"onStartCommand"方法来包含我的服务代码吗

-如果没有,我的代码到底会去哪里?在我"旧"项目的代码中,我似乎完全注释了公共TimerService,并将null传递到IBinder中,然后创建onStartCommand等。。我不太明白为什么

-我在这里的时候,有人能仔细检查一下我下面的倒计时代码吗?如果它是正确的,我应该把它放在线程中吗


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

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");
}
}


然而,在我的旧项目中,我的服务类看起来是这样的:

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
}


谢谢!!

我需要手动添加这个"onStartCommand"方法来包含我的服务代码吗?

是。

有人能仔细检查我下面的倒计时代码吗?

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

除此之外:

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

  • 使用START_STICKY检查Intentextras不是一个好的组合。START_STICKY表示"如果您终止我的进程以释放系统RAM,请尽可能重新启动我的服务,但将null传递给Intent"。这将导致您的服务与NullPointerException一起崩溃。

最新更新