我试图在启动时启动我的服务,但我一直收到1245-1263/? I/ActivityManager﹕ Waited long enough for: ServiceRecord{3d8aa3b0 u9 myPackage/.myService}
例外。
我看过这个:My service always getting Waited long enough for: ServiceRecord error in Kitkat 它告诉我ActivityManager正在启动我的服务。我通过日志声明确认我的接收器确实在工作。以下是有兴趣的人的代码:
public class PhoneStateReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("OnStartUp", "Service is about to be started");
Intent myIntent = new Intent(context, myService.class);
context.startService(myIntent);
}
}
那么,我怎样才能将我的服务优先级设置为"必要"那么Android确保它启动?我查看了这个:How to set the priority of android service?但是它涉及重新启动服务而不是初始启动。
这是我的清单的相关部分:
<receiver android:name=".PhoneStateReceiver"
android:enabled="true"
android:label="PhoneStateReceiver"
android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
<service
android:name=".myService"
android:enabled="true"
android:exported="true" >
</service>
提前致谢。
答案 0 :(得分:2)
您必须注册一个启动完成的广播接收器,然后从那里开始您的服务。这是一个有效的实施。也许是你遗失的<uses-permission>
部分?
修改强>
在我的清单(重要部分)中,我在开头有<uses-permission>
部分。
<manifest xmlns:android="http://schemas.android.com/apk/res/android" ...>
<!-- for services (must be rescheduled after boot) -->
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<receiver android:name=".services.BootCompletedReceiver" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
</manifest>
我的接收器类看起来像这样。注意,我正在启动一个IntentService。
public class BootCompletedReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent msgIntent = new Intent(context, ReminderService.class);
msgIntent.setAction(ReminderService.ACTION_RESCHEDULE);
context.startService(msgIntent);
}
}
答案 1 :(得分:0)
从发布的代码中,看起来清单正在寻找名为.myService的服务,而在BroadcastREceiver中,您尝试启动名为LocationService.class的服务。
这可能是个问题。