前回に続き、Androidのテストアプリ作成中。
。。。なんですが、なんか上手くいかない。
とりあえず、今困っているのはServiceにタイマーをセットしても、
定期的にタスクを実行してくれないこと。
下の【作っているコード】みたいに、Activityから呼び出しを行ったタイミングで
タイマーを生成しても動かないっぽい。
他のサイトを見てみると、下記2点のようになっていた。
1.タイマーをサービス生成(onCreate)時に生成する。
2.タイマー生成時に、定期的に、登録されたCallbackを実行するタスクをするよう設定
1、2共にユーザが使わないのに無駄に処理を行う必要はないだろうなぁ、
と思ってあえて省いていた部分。
なんだけど、実はAndroid的には重要だったりするのかな?
生成時にタイマーを保持していないServiceは
監視対象から外されて後からタイマーを追加してもタイマーが動作しない、とか。
それとも、デーモンタイマーにしてしまっているのがまずいのかなぁ。
はてさて。
次試すときに確認してみよう。
■作っているコード
/**
* 定期通知用のサービスクラス
*
* @author フクシ―
*/
public class TimerService extends Service
{
・・・略
/** 定期通知用のタイマ */
private Timer timer_;
・・・略
/**
* ITimerServiceの実装.
*/
private ITimerService.Stub timerServiceIf_ = new ITimerService.Stub(){
/**
* {@inheritDoc}
*/
@Override
public void registerRepeatTask(long delay, long period, ITimerAlarmServiceCallback callback)
throws RemoteException {
final ITimerServiceCallback targerCallback = callback;
TimerService.this.timer_ = new Timer(true);
TimerTask timerTask = new TimerTask() {
public void run()
{
try
{
Toast toast = Toast.makeText(getApplicationContext(), "Count Start",
Toast.LENGTH_SHORT);
toast.show();
targerCallback.updateTimerText();
}
catch (RemoteException e)
{
e.printStackTrace();
Toast toast = Toast.makeText(getApplicationContext(), "Count Failed",
Toast.LENGTH_SHORT);
toast.show();
}
}
};
TimerAlarmService.this.timer_.schedule(timerTask,delay,period);
Toast toast = Toast.makeText(getApplicationContext(), "Timer Started",
Toast.LENGTH_SHORT);
toast.show();
}
・・・略
}
Serviceにタイマーを途中から追加すると動かない?
登録:
コメントの投稿 (Atom)
0 コメント:
コメントを投稿