私は本「Beginning Android 4 Development」に従っており、ボタンから次の機能を使用してサービスを制御しています。
public void startService(View view) {
startService(new Intent(getBaseContext(), QOLService.class));
}
public void stopService(View view) {
stopService(new Intent(getBaseContext(), QOLService.class));
}
QOLService.java に含まれるもの
public class QOLService extends Service {
int counter = 0;
@Override
public IBinder onBind(Intent arg0) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
//Keep running service until stopped, so return sticky
Timer timer=new Timer();
TimerTask tt =new TimerTask() {
@Override
public void run() {
Log.d("QOLService", String.valueOf(++counter));
}
};
timer.scheduleAtFixedRate(tt, 0, 1000);
Toast.makeText(this, "Service started", Toast.LENGTH_LONG).show();
return START_STICKY;
}
@Override
public void onDestroy() {
super.onDestroy();
Toast.makeText(this, "Service destroyed", Toast.LENGTH_LONG).show();
}
意図したとおり、開始ボタンを押すと「サービスが開始されました」というトーストが表示され、logcat では 1 秒ごとに増加するメッセージが表示されます。これは、アプリケーションを閉じても、意図したとおりに続行されます。
サービスの停止ボタンをクリックすると、予想される「サービスが破棄されました」というメッセージも表示されますが、タイマーは生き続けます! アプリケーションを閉じても、引き続き続行します。サービスの停止ボタンをもう一度クリックすると、サービスが最初に正常に破棄されたかのように、サービスが破棄されたというメッセージが表示されません。
タイマーを不適切に呼び出していますか? もしそうなら、私は本が助言するようにそれを正確にやっているようです!