具有间隔任务的非粘性服务

时间:2012-08-28 11:42:05

标签: android intentservice

假设以下代码:

public class MyApplication extends Application {

    @Override
    public void onCreate()
    {
        super.onCreate();
        getApplicationContext().startService(new Intent(getApplicationContext(), MyService.class););
    }
}

public class MyService extends IntentService {

    private Handler mLoadContactsHandler;

    public MyService() {
        super(MyService.class.getName());
        myHandler = new Handler();
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {

        super.onStartCommand(intent, flags, startId);
        return START_NOT_STICKY;
    }

    @Override
    protected void onHandleIntent(Intent intent)
    {    
        int delay = intent.getIntExtra("delay", 1000 * 60 * 5);
        myHandler.postDelayed(updateTask, delay);
    }

    private Runnable updateTask = new Runnable() {
        public void run() {

            Thread thread = new Thread()
            {
                public void run()
                {
                    ... some task ...
                }
            };
            thread.start();

            myHandler.postDelayed(this, 1000*60*15);
        }
    };
}

即使退出应用,此服务仍会继续运行吗? (退出时使用后退按钮关闭应用程序)

我的意思是,这项服务从未真正完成。如果应用程序已关闭,如何退出服务?当然,我希望它能完成它正在做的事情。

编辑。我希望只要应用程序正在运行,服务就会在其间隔内继续运行。

2 个答案:

答案 0 :(得分:0)

使用IntentService代替,以便Android系统管理它(比如完成时停止服务等)。

答案 1 :(得分:0)

Would this service keep running even if I exit the app? (Exit as in closing the app using back-button)<p>

是的,它会继续运行,除非android杀死它,它每天都会做几次。

How can I make the service quit if the app has been shut down. Of course, I would like it to finish what it's doing.<p>

AFAIK,人们可以知道活动/服务何时被销毁但无法知道应用程序何时被销毁(原因是android喜欢将应用程序保留在内存中,因此没有固定的时间)。所以,我建议你将stopSelf();作为线程的run()方法的最后一行。这将在您的线程完成手头任务后停止服务。

public void run()
                {
                  //  ... some task ...

                stopSelf();
                }