我有一个启动服务的活动。
在我的活动中:
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的重启
我该如何防止这种情况?
答案 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