【问题标题】:Android: Instantiate a Handler in a TimerTask within a ServiceAndroid:在服务内的 TimerTask 中实例化处理程序
【发布时间】:2010-09-18 03:04:14
【问题描述】:

我正在尝试使用服务定期调用我的 API。我用来进行外部 HTTP 调用的异步类将信息返回给传入的处理程序。

下面的简化版本死在 Handler 被实例化的那一行(没有堆栈跟踪)。知道为什么吗?我应该这样做有更好的方法吗?

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;
    }

}

【问题讨论】:

    标签: android android-service


    【解决方案1】:

    我应该这样做有更好的方法吗?

    使用AlarmManagerIntentService。这允许您的代码保持在内存之外,除非在它实际为用户增加价值的时刻(即访问您的 Web 服务)。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-01
    • 2016-08-09
    • 1970-01-01
    • 1970-01-01
    • 2021-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多