Android中Service中是否能做耗时操作,两种启动模式与服务不被杀死的方法

1.在Service中,一般情况下都是不能在Service中耗时操作的,但是可以在mainifest中设置属性progress,这样我们就可以做耗时操作了。

2.Service的两种启动模式:

第一种是startService:startService的启动模式由于没有和Activity进行绑定,所以可以在后台长期运行,但是不能调用服务里的方法,用这种方式启动Service的生命周期为  onCreate() onStartCommand(),onDestroy();在第一次启动之后如果没有运行stopService()方法,则再次调用startService()方法的时候,不会再走onCreate()方法,而是直接就进行运行onStartCommand()的方法。

第二种是bindService:bindSercive的启动模式是与Activity进行绑定的,所以它不可以长期在后台运行,因为当Activity进行销毁的时候,就会停止服务,但是能调用服务力的方法。它的生命周期为,onCreate(),onBind(),onUnbind(),onDestroy(),而一个服务可以被多个客户调用(指的是Activity),当所有客户都调用onUnbind()方法的时候,才会销毁服务。否者不会销毁。


3.由于服务(Service)是在后台运行的,所以是不可见的,所以有可能会被系统杀死。那么怎样可以让服务不被系统杀死呢。

(1)可以把服务变成前台进程,在我们启动服务的时候,可以先运行startForeground()方法让它变成前台进程。在这种情况下确实可以减少被kill,但是还是不能保证完全不被杀死。

(2)可以通过广播的形式,在onDestroyz()方法里设置一条广播,当服务被杀死的时候,通过广播的形式再次唤醒服务。但是可能在使用第三方应用的时候强制了kill服务的话,onDestroy()方法还没有运行,可能就被杀死。所以这个方法还是不能完全保证不能被杀死。

(3)可以通过双Service()的方式来保护服务不被杀死。两个服务相互之间进行判断对方是否被杀死,如果杀死了就再次激活运行。

猜你喜欢

转载自blog.csdn.net/llengnuo/article/details/76772492