RSS

酷いよね、KDDIさんって。

最近KDDIのIS03が予約27万件とかいろいろ騒がれています。

電車の中の吊広告でも、Android Au 解禁、とか出ているんですが。。。。

IS01はもう完全に忘れ去られたという認識でいいんでしょうか(笑

元々形状からしてネタ端末だった、というのはわかりますが。
携帯の癖してイヤホンつけないと話せないし。
しかも、AndroidのOSも1.6で放置というかなりひどい状態。

IS01より前に出たHTC Desireも、Xperiaも
きちんとバージョンアップされているのにねぇ。

流石に買った人がかわいそうだなぁ、と思ってしまう今日この頃。

Serviceにタイマーを途中から追加すると動かない?

前回に続き、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();
        }
・・・略
}

定期実行する、複数の動作をするCallbackを作る場合、パラメータはどちらに持たせるべきなのかな?

Androidでテストアプリを作成中。

。。。なんですが、今悩んでいるのはServiceクラスから
下記の条件を持つCallbackを呼び出す際、Callbackを呼び出す側で
呼び出すキーを指定可能にすべきか否か、という点。

Callbackからキーを指定可能として作るか、
はたまたCallbackは単に叩かれるだけで、
以後の制御などはCallbackから呼び出されるタイミングに
よってキーを切り替えるか、という方式検討。

1.定期的に実行される。
2.種別としては同じだが、設定するオプションによって動作が異なる。

結局、イベントの制御を「Service」でやるか、「Activity」でやるか、
の違いなんでしょうけど。

つまりはこういうこと。
1.Callback側で呼び出すキーを指定可能にする
「Service」側で呼び出す際に、引数としてキーが指定する必要が出てくる。
かつ、呼び出すタイミングもService側で制御が必要となる。
→ Service側がドライブして動作を制御することとなる。

2.CallbackはActivityの通知メソッドを叩くだけにする。
Service側には毎秒カウントを行えるよう整備してもらうだけ。
→ Serviceは一定時間ごとタスクを起動するのみ。
制御的な面はActivityが全て統括して行うこととなる。

。。。②の方がいいのかな?
とりあえず、実際にコード書いてみて確認するしかないなぁ。

てなわけで、ブログ始めてみます!

とりあえず、ようやくブログを公開。

なんか色々考えたことを書きためておける場所っていうのが欲しかったんですよね。
内容としてはIT系の内容から、趣味である料理やら園芸やら、
幅広い領域にわたるとは思いますが、とりあえずは作成。

テスト投稿

テスト投稿