こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

JAVAのソースについて

独学でandroidを勉強しています。
タイマーのソースを見ていたのですが、何故この記述になるか点でさっぱりわかりませんどなたか分かりやすく教えてください。
特に「 timer.schedule( new TimerTask() {~」の部分が分かりません。
もし出来るのならば分かりやすく分解して書きたいのですが可能でしょうか?
お願いします。

public void onCreate(Bundle icicle) {
super.onCreate(icicle);

getWindow().setFormat(PixelFormat.TRANSLUCENT);
setContentView(new TimerView(this));



timer = new Timer(true);
final Handler handler = new Handler();

timer.schedule( new TimerTask() {public void run() {handler.post( new Runnable(){public void run(){
second++;
if(second==59){
minute=minute+1;
second=00;
}
if(minute==59){
hour=hour+1;
minute=00;
}
}});}}, 1000, 1000);
}

投稿日時 - 2011-10-10 23:07:01

QNo.7063939

困ってます

質問者が選んだベストアンサー

既にANo.1の方がヒントを出していますが、timer.schedule()の部分を分解して書くには下記のように新しいクラスを2つ定義する必要があります。

class RunnableX implements Runnable {
public void run() {
second++;
中略
}
}

class TimerTaskY extends TimerTask {
public void run() {
handler.post(new MyRunnable());
}
}

timer.schedule(new TimerTaskY(), 1000, 1000);

ただし、RunnableXの定義からsecond, minute, hourを、TimerTaskYの定義からは変数handlerをアクセスできなければいけません。

RunnableXやTimerTaskYをプログラム中の他の場所で使うことがないなら無名クラスを使って書いた方が簡潔に記述できますが、どちらが読みやすいかは好みの問題です。

投稿日時 - 2011-10-11 00:42:37

お礼

分かりやすく説明していただいてありがとうございます。
何とか理解できそうです。
またよろしくお願いします。

投稿日時 - 2011-10-14 12:28:30

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

ANo.2でnew MyRunnable()と書いた部分はnew RunnableX()の誤りです。訂正の上お詫びします。

投稿日時 - 2011-10-11 21:53:40

ANo.1

とりあえず、「無名クラス」でググッてちょうだい。

投稿日時 - 2011-10-10 23:22:42

あなたにオススメの質問