服务因活动“死亡”而崩溃

时间:2011-07-03 15:04:31

标签: android service crash

我有一个启动服务的活动。

在我的活动中:

startService(new Intent(this, MyService.class));

在我的服务中,onStart():

/* Show notification */
int icon = R.drawable.icon;
tickerText = getResources().getString(R.string.app_name);
long when = System.currentTimeMillis();
contentTitle = getResources().getString(R.string.app_name);
contentText = getResources().getString(R.string.running);

Intent notificationIntent = new Intent(this, activityClass).setAction(Intent.ACTION_MAIN).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
notification = new Notification(icon, tickerText, when);
notification.setLatestEventInfo(this, contentTitle, contentText, contentIntent);

notification.flags = Notification.FLAG_ONGOING_EVENT;

((NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE)).notify(0, notification);

startForeground(0, notification);

该服务有一个计时器,每隔3-4分钟执行一些工作,并在可能的情况下向活动广播信息。当活动关闭时,服务应继续开展工作。

当我运行应用程序并返回主屏幕时,服务会继续运行。但过了一段时间我得到了这些logcat消息,服务停止了:

  

07-03 16:55:09.440:INFO / ActivityManager(583):进程com.myapp(pid 11665)已经死亡。   07-03 16:55:09.440:WARN / ActivityManager(583):在5000ms内调度崩溃服务com.myapp / .MyService的重启

我该如何防止这种情况?

3 个答案:

答案 0 :(得分:7)

提供的答案对我没有帮助。但是我发现了一个非常简单的方法,添加了Manifest

    <service android:name="..." android:process=":remote" />

http://developer.android.com/guide/topics/manifest/service-element.html

此时只是测试,我的Activity已经被杀死,但我的服务正在运行。

答案 1 :(得分:2)

  

当我运行应用程序并返回主屏幕时,服务会继续运行。但过了一段时间我得到了这些logcat消息,服务停止了......我怎么能阻止这个呢?

一般来说,你不这样做。

服务并非旨在永远运行。太多开发人员已经启动了服务并且从未停止过它们。而且,在你的情况下,他们没有充分理由这样做。在内存中停留服务只是看着时钟滴答是浪费,特别是因为开发人员做了这样的事情,Android在他们坚持太久后“崩溃”服务。

在您的情况下,请切换为使用AlarmManager,可能与IntentService一起使用,因此当没有更多工作要做时,服务会自动关闭。

答案 2 :(得分:1)

您需要查看将服务作为Remote Service运行,以便它在自己的进程中运行。

关于远程服务的博客: http://saigeethamn.blogspot.com/2009/09/android-developer-tutorial-part-9.html

示例一的例子: http://about-android.blogspot.com/2010/02/android-remote-service-sample.html