1

現在、取り組んでいたプロジェクトを再開し、ゼロから作り直しています。
ただし、Service クラスを作成すると、何かに気付きました。古いプロジェクトでは、onStartCommand と呼ばれる Service 内のメソッドに、起動する必要があるすべてのコードが含まれていますが、新しいプロジェクトでは、Service クラスを作成すると、このメソッドはどこにも見つかりません。

- サービス コードを含めるには、この「onStartCommand」メソッドを手動で追加する必要がありますか?

- そうでない場合、私のコードはどこに行くのでしょうか? それは私の「古い」プロジェクトのコードにあるようで、public TimerService を完全にコメントブロックし、null を IBinder に渡し、代わりに onStartCommand などを作成します..そして、その理由がよくわかりません。

- 私がここにいる間、誰かが私の CountdownTimer コードを再確認してもらえますか? それが正しければ、スレッドの中に入れるべきですか?


新しいサービス クラスを作成すると、次のようになります。

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
}


ありがとうございました!!

4

1 に答える 1

0

サービス コードを含めるには、この「onStartCommand」メソッドを手動で追加する必要がありますか?

はい。

誰かが私のCountdownTimerコードを再確認してもらえますか?

絶対に必要な場合にのみサービスを作成してください。このサービスが必要な理由は不明です。

それ以上:

  • そのサービス内からサービスを停止するには、stopSelf()ではなくを使用します。stopService()

  • Intentエクストラ調べて使うSTART_STICKYのは、良い組み合わせではありません。START_STICKY「システム RAM を解放するためにプロセスを終了する場合は、可能であればサービスを再起動してください。ただしnullIntent「. これにより、サービスがNullPointerException.

于 2019-01-15T21:01:41.533 に答える