RemoteService - 关闭启动Activity后重新启动

时间:2014-03-19 13:53:50

标签: android service android-activity

我被封锁了几天而无法找到答案。

我从活动中启动远程服务。启动服务后,我关闭启动活动。 我从任务管理器关闭主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,从任务管理器或他的错误,我希望该服务在后台运行。

我在这里做错了什么或遗漏了我的代码中的某些内容以防止重启? 为什么重置服务?

3 个答案:

答案 0 :(得分:1)

Android Developers - Services:“如果声明服务在前台运行(稍后讨论),那么它几乎永远不会被杀死。否则,如果服务启动并且长时间运行,那么系统随着时间的推移,它将降低其在后台任务列表中的位置,并且该服务将极易被杀死 - 如果您的服务已启动,那么您必须将其设计为优雅地处理系统的重启“。

声明您的服务在前台运行有特定要求:“前台服务必须提供状态栏的通知,该通知位于”正在进行“标题下,这意味着除非服务是,否则通知不能被解除停止或从前台移除。“和“要请求您的服务在前台运行,请调用startForeground()。”我知道你说你不希望它成为前台服务,但你必须忍受Android为你设定的参数。

答案 1 :(得分:0)

解决启动Activity时重启服务的问题关闭! 您应该使用startForeground()来解决此问题。 因此,startForeground()在关闭启动Activity时解决了重启问题。 我也提供了服务,重新启动可靠。

我还有一个问题..如果服务...像facebook和其他大型服务在后台运行而没有实现任何startForeground()。 它们也没有被系统杀死,它们在没有任何startForeground()实现的情况下永远在后台运行。他们永远生活在背景中。肯定是某种可能的。 有谁知道怎么做?

答案 2 :(得分:0)

如何避免通知但仍然实现startForeground()方法: 这是通过在没有

的情况下实施通知来完成的

.setSmallIcon(R.drawable.ic_launcher)

有关其他详细信息,请参阅

How to correctly handle startForegrounds two notifications