2013-05-01 127 views
1

我正在开发一个使用服务的应用程序。该服务本身有效,但Android系统在退出我的活动后的30秒内杀死它,有时早6秒。Android服务非常迅速地死亡

我已经看过很多不同的职位关于这一点,并知道我可以使用带有图标的前台服务。在这个阶段,我不想走这条路。

我明确地使用下面的代码启动服务。该服务由SwitchPreference控制。 该服务还返回START_STICKY,以便它重新启动。

这是我正在使用的代码(不是像这样一起运行)。

// starting within the activity 
Intent intent = new Intent(context, ListenerService.class); 
startService(intent); 

// stopping within the activity 
Intent intent = new Intent(context, ListenerService.class); 
stopService(intent); 

// Service onStartCommand 
return START_STICKY; 

当我退出这个程序时,我第一次看到活动受到破坏,然后在30秒内,我看到了我的烤消息中显示,说明该服务已重新启动。

我知道Android系统在内存不足时有权杀死我的服务,但是我应该希望它在我退出应用程序后几乎立即被杀死? 它只是垃圾收集我的活动引用和启动服务“干净”?

我正在清理活动的onStop()方法中的对象。

另外,当我通过活动返回到我的应用程序时,绑定到服务以获取对服务对象的引用是否是一种好的做法? 处理通信(完成)活动的方法如下结合:

Intent intent = new Intent(this, ListenerService.class); 
bindService(intent, serviceConnection, 0); 

解除绑定在的onStop()方法完成

unbindService(serviceConnection); 

所以2个问题:
1.我应该期待Android系统几乎立即杀死并重启我的服务?
2.我的约束方法是否可以接受?

非常感谢

+0

使用带有服务的广播接收器。 – 2013-05-01 06:44:18

+0

您是否从任何地方拨打stopSelf或stopService命令?如果服务器为每个启动的命令调用stopSelf,则它无关并且可能被销毁。 – httpdispatch 2013-05-01 06:58:00

回答

0

从我的理解,你是通过调用startService和stopService控制你的服务通过您的活动的生命周期。它是否正确?

如果要保持服务正常运行,为什么要调用stopService?

关于重新启动服务 - 一切取决于您的服务配置和代码实现。

+0

感谢您的反馈。我有一个广播接收器注册在服务....取决于用户将选择什么。在测试期间,我确实已经注册了广播接收器(传入短信),并且服务在退出应用程序后不久仍然重新启动。 – Cameron 2013-05-01 08:30:28

+0

我根本不叫selfStop。 startService和stopService由用户通过SwitchPreference控制。 SwitchPreference绝对开启,服务在Android终止并重新启动服务时开始。 – Cameron 2013-05-01 08:34:54