目覚ましアラームや、定期的なサーバー通信とか、したいと思うのですが、Serviceについての記述がややこしいので、ちょっと自分メモを数回に分けてまとめておきます。
今回はbindと言う関数は無視します!serviceだけ。
まず、最初に
/*————–
サービスとは
————–*/
動き続ける、画面を持たない。つまりは、一度起動をしてしまうと、
サービス.stopSelf()
も利用ができるのですが、基本的には、とまらず、そこで動き続けるイメージです。
(かなりの付加がかかる場合には、stopしたいですが。。)
/*—————-
とりあえず、使ってみる。
—————–*/
serviceをとりあえず、使ってみます。
SpecialService.java
public class SpecialService extends Service {
@Override
public void onCreate() {
Toast.makeText(this, "こんにちわ", Toast.LENGTH_LONG),show();
super.onCreate();
}
}
上記のサービスを作成して、manifest.xmlに下記を追加します。
<service android:name=".SpecialService"></service>
で、これを起動中のアクティビティを呼びます。
MainActivity.java
Intent intent = new Intent(this, SpecialService.class);
startService(intent);
上記で、動きました!!
/*——–
で??
——–*/
と言う状況になります。
実は、継続する動作に関して利用をする事に効果を発揮するのが、Serviceらしいです。
/*———————-
timerで継続させてみる。
———————–*/
※すいません。onStart()に書いたscheduleですが、タスクキラーとかにbanされてしまったあと実行される時にonCreateしか実行されないで、onStartは実行されない可能性もありそうなので、onCreateに書いてもいいかもしれない
private Toast _toast = null;
@Override
public void onCreate() {
_toast = Toast.makeText(this, "showをしないであらかじめつくっておく。", Toast.LENGTH_LONG);
super.onCreate();
}
@Override
public void onStart(Intent intent, int startId) {
schedule(10000);
super.onStart(intent, startId);
}
public void schedule(long delay) {
if (timer != null) {
timer.cancel();
}
timer = new Timer();
TimerTask timerTask = new TimerTask() {
public void run() {
_toast.show();
}
};
timer.schedule(timerTask, delay);
}
こんな感じで作成をすると、10秒後に
「showをしないであらかじめつくっておく。」
とToastがでました。
ですが、これもActivityにもある機能です。
Serviceの動作を確認する為には、Srviceを起動した後に、アプリを終了します。
そうすると、10秒後に
「showをしないであらかじめつくっておく。」
が表示されました。
/*————————–
timerを繰り返し設定する
————————–*/
timer.schedule(timerTask, delay,delay);
とします。
private Toast _toast = null;
@Override
public void onCreate() {
_toast = Toast.makeText(this, "繰り返す。", Toast.LENGTH_LONG);
super.onCreate();
}
@Override
public void onStart(Intent intent, int startId) {
schedule(10000);
super.onStart(intent, startId);
}
public void schedule(long delay) {
if (timer != null) {
timer.cancel();
}
timer = new Timer();
TimerTask timerTask = new TimerTask() {
public void run() {
_toast.show();
}
};
timer.schedule(timerTask, delay,delay);
}
毎10秒後とに「繰り返す。」が実装されます。
このServiceの機能をやめる為には、設定からアプリを終了するか、電源を落とすかになります。
ちょっと迷惑なアプリができてしまいますが。以上です。
一部不具合がありましたので、下記にて補完しております。
Serviceを使いたい。時間の管理をする。