2015-07-10 742 views
2

我试图在启动时启动我的服务,但我一直收到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> 

在此先感谢。

回答

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); 
    } 
} 
+0

我有,我想。我将编辑问题以显示我的清单。 –

0

从所发布的代码,它看起来像清单正在寻找一个叫做.myService服务,并在广播接收器你试图启动一个名为LocationService.class服务。

这可能是问题。

+0

对不起,我打错了。这不是原因。不过谢谢。 –

相关问题