2011-09-25 31 views
2

我看到这个例子的程序,如高级任务杀手,看门狗,易趣,电池小工具等。有一个监视设备活动的后台服务运行,一个广播接收器,但有一个选项可禁用显示的通知图标。目前,我的应用程序完美的作品通过调用:android长时间运行服务没有通知

Context context = getApplicationContext(); 
Intent intent = new Intent(context, SomeBackGroundService.class); 
context.startService(intent) 

,然后在我的服务,我呼吁:

startForeground(NOTIFICATION_ID, notification); 

现在怎么样了,这些其他应用程序可以有一个长期运行的BroadcastReceiver运行没有通知图标?我需要做什么才能禁用/设置为隐藏图标并将此功能添加到我的应用程序?

在此先感谢

+0

您提到的那些应用程序无法保证继续运行。如果系统需要释放内存,它将在必要时终止它们。 – AndroidDev

回答

-1

你的服务是完全独立的是否存在它的通知。如果您删除了该行,startForeground,该服务将继续运行。服务停止的唯一时间是调用context.stopService()或stopSelf()。将一些日志扔进你的服务中,你会看到它继续运行。

重写onStartCommand确定垃圾收集后您的服务行为:

@Override 
public int onStartCommand(Intent intent, int flags, int startId() { 
     super.onStartCommand(intent, flags, startId); 
     doWork(); 
     return START_STICKY; 
} 

START_STICKY垃圾回收后重新创建你的服务。 START_REDELIVER_INTENT将在使用原始意图进行垃圾回收之后重新创建您的服务,仅当您需要额外的意向数据时才使用此服务。

+0

我会再试一次,但是当我有过去那样的代码时,无论是服务还是广播接收者都遇害了。我的应用程序是一个长时间运行的服务,用于在收听特定设备相关事件时触发新事件或日志。 – Havoc

+0

好吧,我删除了startForeground(NOTIFICATION_ID,通知);从我的服务,并用mNotificationManager.notify(NOTIFICATION_ID,通知)替换它;现在我的服务运行一段时间后,广播接收器停止接收。有任何想法吗? – Havoc

+0

我越来越看这个。发现发生的事情是我的广播接收器停止收听。我认为这是垃圾收集。 – Havoc

5

我不是这方面的专家,但我不同意接受的答案。

您的startForeground是确保您的服务继续运行的关键。

没有它,它可能会继续运行,但它具有低得多的优先级,所以它更有可能被系统杀死。

+0

这是一个事实,我观察到它发生了。该文档明确指出,如果内存需要释放,您的服务将被杀死。 – AndroidDev

+0

我最终没有走这条路。我的服务器正在加载并丢失我的数据。我写了一个扩展广播接收器的类,它将我的数据存储在我的首选项文件中。所以它总是在倾听。我开始服务线程来处理当我得到我想要的意图时要做什么。这是完美的。 – Havoc

-2

创建一个包含用png制作的图标的通知,高度和宽度只有1个像素,并且使该像素透明。