2011-10-06 72 views
0

我有一个重大问题,保持服务活着从广播开始接收

我做这适用于设备启动了广播接收器,所以我需要开始执行一项新的服务长时间运行的操作,

所以在广播接收机的的onReceive()方法,我提出一个新的意图,并通过该启动一个新的服务,

现在我的问题是,这种服务尽快只执行很短的时间,作为onRecieve()方法完成它的过程也完成了,并且我的服务也随着Receiver进程的结束而停止。

因此,我该如何做到这一点,以保持从BroadcastReceiver开始的服务过程。

+0

我不确定这是否重要,但是您是否正在为您的服务使用单独的线程? – Noel

+0

http://stackoverflow.com/questions/3696082/how-to-schedule-my-android-app-to-do-something-every-hour 请按照这两个链接,并尝试这个例子。 – Spencer

+0

没有不使用单独的线程,但在服务中我使用单独的线程,但此线程也停止。 –

回答

3

现在我的问题是,只要onRecieve()方法完成它的过程也完成了,并且我的服务也随着Receiver进程的结束而停止,此服务只执行很短的时间。

只有当您拨打stopService()或服务呼叫stopSelf()时才会发生这种情况。该服务具有BroadcastReceiver的独立生命周期。它不会是开始之前onReceive()结束。

但在服务中,我使用单独的线程,但此线程也停止。

这只会在您自己停止线程时才会发生。 Android不知道你创建的线程。

现在,最终,您的应用程序的进程将被终止。使用正在运行的服务时,这可能需要30分钟到几天的时间,具体取决于设备上是否还有其他功能,无论您是使用startForeground()等。一旦进程终止,一切都会消失,后台线程和所有。

+0

是的,我的过程未在管理应用程序中列出。 –

+0

但是那么为什么这个服务终止,如果我在活动内部调用startService(),那么它不会终止 –

+0

可以请给我一个来自BroadcastReceiver或Service类的启动活动的代码,我使用下面的代码,但是出现错误。 Intent i = new Intent(this,MyActivity.class); \t \t i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); \t \t startActivity(i);错误是标志错误,它说无法开始活动没有活动上下文 –