何时可以销毁服务以及插入stopSelf()方法?

时间:2015-10-23 13:18:09

标签: android

我正在阅读the official documentation about Services,但我有点困惑,因为有些事情并不那么明确。

让我们看看这个片段:

public class MyService extends Service {
    public int onStartCommand(Intent intent, int flags, int startID) {
        while(...any condition...) {
            //some actions
        }

        return START_SOMETHING;
    }

    public IBinder onBind(Intent intent) {
        return null;
    }
}

我怀疑如下:

  1. Android系统可以销毁未绑定到当前焦点活动但未在前台声明的服务。但是Android系统是否可以销毁服务,即使它仍在while循环中?
  2. 当我致电stopService()时,是否等待onStartCommand()转到退货声明?
  3. 我应该在哪里插入stopSelf()电话?在退货声明之前?

1 个答案:

答案 0 :(得分:0)

  

Android系统是否可以销毁服务,即使它仍在while循环中?

是。出于某种原因,极低的内存压力(例如),Android系统会在不调用Service方法的情况下杀死onDestroy()。为什么?因为Service总是在UI线程上运行。

  

当我调用stopService()时,它是否等待onStartCommand()转到return语句?

没有。当Android系统杀死Service时,将执行Return语句的操作。但是,如果您手动调用stopSelf(),则将忽略return语句的操作。

  

我应该在哪里插入stopSelf()调用?在退货声明之前?

随时随地致电stopSelf()。例如,如果用户按下按钮,请拨打stopSelf()以停止Service播放音乐。