我被封锁了几天而无法找到答案。
我从活动中启动远程服务。启动服务后,我关闭启动活动。 我从任务管理器关闭主Activity,如下所示:home_btn long press并显示打开的应用程序列表,然后在主Activity上向左滑动。
发生的事情是我的服务重新启动!甚至认为它是一个远程服务,它有自己的流程,不依赖于启动活动!
所有内部变量都将被重置,我不希望这样。
- 我不想使用useForeground()方法,因为我不希望我的服务在通知中可见
我目前正在启动这样的远程服务并开始服务(我可以在菜单设置 - > Apps->标签运行中看到它):
btnStartSrv.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
startService(new Intent("com.example.servicerst_tst.RemoteService"));
}
});
android manifest xml看起来像这样:
<service android:name="com.example.servicerst_tst.RemoteService"
android:process=":serviceTST" >
<intent-filter>
<action android:name="com.example.servicerst_tst.RemoteService" >
</action>
</intent-filter>
</service>
服务类:
public class RemoteService extends Service{
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// We want this service to continue running until it is explicitly
// stopped, so return sticky.
return START_STICKY;
}
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
}
我在DDMS中看到服务重新启动或重新启动.. 关闭主Activity时,服务将从DDMS中的列表中消失,并在大约2秒内自行启动。这也可以在服务中看到。如果您放置一些在服务生命周期内发生变化的内部变量。它们将被重置,就像服务在关闭主Activity后重新启动一样。
我只是希望我的服务不能重置,当我关闭主启动器Activity时重启。 如果用户关闭启动器Activity,从任务管理器或他的错误,我希望该服务在后台运行。
我在这里做错了什么或遗漏了我的代码中的某些内容以防止重启? 为什么重置服务?
答案 0 :(得分:1)
从Android Developers - Services:“如果声明服务在前台运行(稍后讨论),那么它几乎永远不会被杀死。否则,如果服务启动并且长时间运行,那么系统随着时间的推移,它将降低其在后台任务列表中的位置,并且该服务将极易被杀死 - 如果您的服务已启动,那么您必须将其设计为优雅地处理系统的重启“。
声明您的服务在前台运行有特定要求:“前台服务必须提供状态栏的通知,该通知位于”正在进行“标题下,这意味着除非服务是,否则通知不能被解除停止或从前台移除。“和“要请求您的服务在前台运行,请调用startForeground()。”我知道你说你不希望它成为前台服务,但你必须忍受Android为你设定的参数。
答案 1 :(得分:0)
解决启动Activity时重启服务的问题关闭! 您应该使用startForeground()来解决此问题。 因此,startForeground()在关闭启动Activity时解决了重启问题。 我也提供了服务,重新启动可靠。
我还有一个问题..如果服务...像facebook和其他大型服务在后台运行而没有实现任何startForeground()。 它们也没有被系统杀死,它们在没有任何startForeground()实现的情况下永远在后台运行。他们永远生活在背景中。肯定是某种可能的。 有谁知道怎么做?
答案 2 :(得分:0)
如何避免通知但仍然实现startForeground()方法: 这是通过在没有
的情况下实施通知来完成的.setSmallIcon(R.drawable.ic_launcher)
有关其他详细信息,请参阅