2

假设以下代码:

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

即使我退出应用程序,该服务会继续运行吗?(退出就像使用后退按钮关闭应用程序一样)

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

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

4

2 回答 2

0

改用IntentService以便 Android 系统对其进行管理(例如在完成时停止服务等)。

于 2012-08-28T11:52:57.867 回答
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();
                }
于 2012-08-28T15:28:25.357 回答