1

サービスを使用してAPIを定期的に呼び出そうとしています。外部HTTP呼び出しを行うために使用する非同期クラスは、渡されるハンドラーに情報を返します。

以下の簡略化されたバージョンは、ハンドラーがインスタンス化された行で停止します(スタックトレースなし)。なぜですか?これを行うためのより良い方法はありますか?

package com.fred.services;

import java.util.Timer;
import java.util.TimerTask;

import android.app.Service;
import android.content.Intent;
import android.os.Handler;
import android.os.IBinder;
import android.util.Log;

public class NotificationService extends Service {

    private static final String TAG = "com.fred.services NotificationService";

    public long delay = 0;
    public long period_in_minutes = 10;
    public long period = 1000*60*period_in_minutes;

    private Timer timer = null;
    private TimerTask task = new TimerTask() {
        @Override
        public void run() {
            Handler h;
            Log.i(TAG, "now you see it");
            h = new Handler();
            Log.i(TAG, "now you don't");
        }
    };

    @Override
    public void onCreate(){
        super.onCreate();
        if (timer == null) startservice();
    }

    private void startservice() {
        if (timer == null) timer = new Timer();
        timer.scheduleAtFixedRate(task, delay, period);
    }

    @Override
    public IBinder onBind(Intent arg0) {
        // TODO Auto-generated method stub
        return null;
    }

}
4

1 に答える 1

1

これを行うためのより良い方法はありますか?

とを使用AlarmManagerIntentServiceます。これにより、コードが実際にユーザーに付加価値を与えているとき(つまり、Webサービスにアクセスしているとき)を除いて、コードをメモリから外すことができます。

于 2010-09-18T11:59:16.993 に答える