2016-06-27 55 views
0

一些问题从official doc关于Android服务生命周期

只有当内存不足时,它必须恢复系统资源用于具有用户焦点的活动的Android系统将强制停止服务。如果该服务被绑定到具有用户焦点的活动,那么它不太可能被杀害

当服务确实是由系统终止,是onStop()onDestroy()被调用?

考虑下面的代码片段:

public class MyService extends Service { 

    int count = 0; 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     count++; 
     return START_STICKY; 
    } 

    ... 
} 

通过onStartCommand()返回START_STICKY,我想为MyService会被系统杀死后重新创建自身内存不足的情况。每次重新创建MyService时,计数值是否会重置为0?

回答

5

当一个服务确实被系统杀死,onStop()或onDestroy()会被调用吗?

没有onStop()可用于Service。使用onDestroy()可能会或可能不会调用Service

每次重新创建MyService时,计数的值是否会重置为0?

是的。

+0

我的不好,'onStop()'确实不存在于Service上。 “onDestroy()”意味着什么可能会或可能不会被调用?是否有某种方法可以确保在这种低内存情况下总是会调用onDestroy()? –

+1

@HendraAnggrian:否。首先,如果系统RAM的需求是非常高的优先级(例如来电),Android将不会花时间执行'onDestroy()',因为这可能需要很长时间。其次,内存不足并不是您的流程终止的唯一原因。例如,如果用户在设置中的应用程序屏幕上按下强制停止,则直接终止您的进程,而不会在正在运行的组件上调用onDestroy()。 'onDestroy()'用于轻量级清理,但不要依赖它。 – CommonsWare

+0

给你,先生,我说谢谢你。 –