Android应用程序处于手机后台时如何运行任务

时间:2014-08-11 22:35:34

标签: java android

我尝试首次创建服务时,如果应用程序是手机的背景,那么当应用程序是手机的背景时,每15秒就会从活动中运行一个方法,并且到目前为止教程并没有帮助。到目前为止这是我的代码。请原谅我,如果我在这里看起来很愚蠢,这是我第一次使用服务。

服务代码

package com.example.adrian.trucktracker;

import android.app.Service;
import android.content.Intent;
import android.os.Handler;
import android.os.IBinder;
import android.os.Looper;

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

public class AutoUpdateService extends Service {
    Locator locator = new Locator();
    Timer myTimer = new Timer();
    private class MyTimerTask extends TimerTask
    {

        @Override
        public void run() {
            Handler handler = new Handler(Looper.getMainLooper());

            handler.postDelayed(new Runnable() {
                @Override
                public void run() {

                    locator.TemperatureCatch();
                }
            }, 1000 );
        }
    }

    @Override
    public void onStart(Intent intent, int startId) {
        super.onStart(intent, startId);
        MyTimerTask myTimerTask = new MyTimerTask();
        myTimer.scheduleAtFixedRate(myTimerTask, 0, 15000);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        myTimer.cancel();
        stopSelf();
    }

    @Override
    public IBinder onBind(Intent intent) {
        // TODO: Return the communication channel to the service.
        throw new UnsupportedOperationException("Not yet implemented");
    }
}

我的切换按钮代码

 @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        if (isChecked)
        {

startService(new Intent(this,AutoUpdateService.class));
        }
        else
        {
         stopService(new Intent(this,AutoUpdateService.class));
        }

1 个答案:

答案 0 :(得分:1)

您使用服务是正确的。不要使用Timer,因为它是你不需要的额外线程。您可以做的是使用AlarmManager来安排您的服务意图每15秒(间隔)启动一次。这将通过在您的服务中调用onStartCommand来触发服务的间隔时间,您可以通过onStartCommand的参数读取(如果需要)intent来执行任何操作。