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

问题描述:

我被阻止了几天,无法找到答案。RemoteService - 关闭启动后重新启动活动

我从一个Activity开始一个远程服务。开始服务后,我关闭启动活动。 我从任务管理器中关闭了主Activity,如下所示:home_btn长按,显示打开的应用程序列表,然后向左滑动到主Activity上。

发生的事情是我的服务重新启动!即使认为它是一个远程服务,它拥有自己的进程,并不依赖于启动活动!

所有的内部变量将被重置,我不想这样做。

- 我不希望使用useForeground()方法,因为我不希望我的服务是在通知可见

我现在开始这样的远程服务和服务启动(我可以看到它在菜单设置 - > Apps->标签中运行):

btnStartSrv.setOnClickListener(new OnClickListener() { 
    public void onClick(View v) { 
     startService(new Intent("com.example.servicerst_tst.RemoteService"));      
    } 

}); 

Android清单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之后自行重启一样。

我只想让我的服务不重置,重新启动时我关闭主发射器活动。 如果用户关闭启动器活动,从任务管理器或他的错误,我希望服务在后台运行。

我在这里做错了什么或从代码中丢失了一些东西以防止重新启动? 为什么重置服务?

+0

它实际上在做什么吗?你为什么担心它重新启动?任何操作系统在需要时都可以关闭(以节省内存,电力等)。 –

+0

目前它没有做一件事,但你可以在其中放入几件东西并以同样的方式重新开始。 我试图尽量减少最简单的服务形式的例子。 我在服务中设置了一些变量,并且还启动了一些线程,结果与这种简单的服务形式相同。我不希望服务重新启动。 正如我所说的,我不希望用户关闭从任务管理器启动Activity并重新启动我的服务。 我该如何避免这个重新启动问题? – marisxanis

+0

假设用户重新启动手机。你将如何防止服务被杀?改变你对这个问题的看法。当你的服务退出时,将状态保存到永久存储器。重新启动时,加载状态。 –

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

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

+0

ook,明白了。从我所看到的,我必须让它重新开始可靠!如果你想一直活着,也可以使用startForeground()。 – marisxanis

解决启动时重新启动服务的问题活动关闭! 你应该使用startForeground()来避免这个问题。 因此startForeground()在关闭启动Activity时解决了重新启动问题。 我也做了服务,重新启动可靠。

不过我有一个问题..如何服务......如Facebook和其他大型服务在后台运行没有任何startForeground()实施。 此外,它们并没有被系统杀死,并且它们在没有任何startForeground()实现的情况下永远在后台运行。他们永远活在后台。肯定是可能的。 有谁知道如何?

如何避免通知,但仍实现startForeground()方法: 这样做是通过执行通知而不

.setSmallIcon(R.drawable.ic_launcher)

等详细资料请参阅

How to correctly handle startForegrounds two notifications