为啥这个简单的服务没有启动?
Posted
技术标签:
【中文标题】为啥这个简单的服务没有启动?【英文标题】:Why is this simple service not starting?为什么这个简单的服务没有启动? 【发布时间】:2011-01-21 14:04:10 【问题描述】:我有一个带有处理程序的服务,该处理程序必须每 5 秒在 logcat 中写入“Hello”。但是它并没有在logcat上写任何东西......就像服务没有执行一样,我在它上面放了一个断点,调试模式永远不会在断点处停止。
我在我的应用程序的第一个活动中启动服务:
startService(new Intent(GPSLoc.this, MyServiceNotifications.class)); //enciendo el service
我确信代码startService
被执行了,因为它在启动另一个活动之前被调用,而另一个活动开始了。
这是我的服务代码:
public class MyServiceNotifications extends Service
boolean serviceStopped;
private Handler mHandler;
private Runnable updateRunnable = new Runnable()
@Override
public void run()
if (serviceStopped == false)
createNotificationIcon();
queueRunnable();
;
private void queueRunnable()
// 600000 : cada 10 minutos, comprueba si hay nuevas notificaciones y actualiza la
// notification BAR
mHandler.postDelayed(updateRunnable, 5000);
@Override
public IBinder onBind(Intent intent)
return null;
@Override
public void onCreate()
serviceStopped = false;
// //////////////////////////////////////MANEJADOR SIMILAR A UN HILO
mHandler = new Handler();
queueRunnable();
// ///////////////////////////////////// FIN MANEJADOR
@Override
public void onDestroy()
serviceStopped = true;
@Override
public void onStart(Intent intent, int startid)
public void createNotificationIcon()
Log.d("MyServiceNotifications", "Hello");
【问题讨论】:
您是否在清单文件中声明了服务? 在 onCreate() 中放一个 logcat,有用吗?另外,你什么时候在 updateRunnable 上调用 run()?我看不到它会被执行 哦,真的,我原谅我放了清单!谢谢 还要检查的另一件事是您的服务是否尚未运行。在这种情况下,您需要停止服务并重新启动。 【参考方案1】:您是否在androidManifest.xml
中声明了服务?
【讨论】:
哇,我现在感觉很蠢 :) 我很惊讶当这种情况发生时没有记录错误,就像活动一样。 当他意识到自己忘记了这么简单的事情时,他会倒吸一口凉气,尤其是在上下滚动代码几个小时之后......哈哈。 它也需要在 部分中声明。不要问我是怎么知道的…… ....非常重要:正确书写名称空间,例如:
<service android:name="com.example.data.synchronization.SynchronizationService"/>
在我之前的AndroidManifest.xml
中是(错误的):
<service android:name="com.example.data.SynchronizationService"/>
没有服务启动并且没有错误信息!
【讨论】:
这个解决方案对我帮助很大! 不好意思承认,但我花了一个小时大惊小怪才意识到这也是我的问题。 也许Android Studio会更加重视识别这类问题... @Jared 哥们,这里也一样 @Jared 只是好奇,您使用的是 Android Studio 还是 Eclipse?你用 Gradle 编译吗?【参考方案3】:您好,您编写的代码运行良好。可能是你在关闭应用程序标签之前忘记在清单文件中添加以下代码。
<application>
....
<service android:name=".MyServiceNotifications"/>
</application>
【讨论】:
我的投票是“在关闭应用程序标签之前”。程序员犯了愚蠢的错误! 如果您在清单中运行 Analyze...Inspect Code,就会出现这种情况。【参考方案4】:还有一些情况需要在manifest中定义“enabled”属性为“true”,像这样:
<service android:enabled="true" android:name=".MyServiceNotifications" />
查看此链接了解更多信息:http://developer.android.com/guide/topics/manifest/service-element.html
【讨论】:
"默认值为true
。"【参考方案5】:
如果使用 Xamarin Droid,最简单的方法是将类标记为这样的服务:
[Service]
public class LongRunningTaskService : Service
...
那么就不用放在AndroidManifest.xml中了。
【讨论】:
【参考方案6】:非常罕见的情况。但是在处理多进程应用程序时,活动和服务需要在Manifest.xml
中提到android:process
例如: RemoteServiceBindingActivity.kt
startService(Intent(this, RemoteService::class.java))
然后
<activity
android:name=".RemoteServiceBindingActivity"
android:process=":test" />
<service
android:name=".RemoteService"
android:enabled="true"/>
没用。我也必须在 Manifest 中将 android:process=":test"
添加到服务中,如下所示:
<service
android:name=".RemoteService"
android:enabled="true"
android:process=":test"/>
【讨论】:
以上是关于为啥这个简单的服务没有启动?的主要内容,如果未能解决你的问题,请参考以下文章