Android重复报警调用服务但最终得到“进程坏”错误

时间:2015-03-05 10:00:48

标签: android service sharedpreferences commonsware-cwac

我的主要活动使用CommonsWare提供的方便的WakefulIntentService来安排一个警报,轮询我的服务器以查找数据的变化。当警报响起时,我呼叫服务:

Intent backgroundIntent = new Intent(context, PollService.class);
WakefulIntentService.sendWakefulWork(context, backgroundIntent);

该服务读取一条服务器数据,'令牌'并将其与“老牌”#39;存储在首选项中的值。如果令牌不匹配,我会发送一个有未决意图的通知来开始活动。

SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
String oldToken = settings.getString("oldToken", "empty");
Log.d(TAG, "Old token: " + oldToken);
if (!token.equals(oldToken)){
    ...

这种方法可以使用一段时间,但是经过几个小时的随机播放后,#old;老`开始回归'空?好像该服务无法再访问共享首选项。

然后我注意到这出现在logcat中:

03-12 08:32:51.325     506-7595/? W/BroadcastQueue﹕ Unable to launch app com.xxx.xxx/10086 for broadcast Intent { flg=0x14 cmp=com.xxx.xxx/com.commonsware.cwac.wakeful.AlarmReceiver (has extras) }: process is bad

我一直试图考虑这两个事件是否相关。它们似乎确实同时发生。

为什么我得到"过程很糟糕"错误?为什么我的服务失去了与共享偏好的连接?

感谢您的考虑。

1 个答案:

答案 0 :(得分:0)

我遇到此process is bad错误,我必须保持导出的FCM服务。 添加:

android:exported="true"

或完全删除导出

我的服务现在看起来像这样:

    <service
        android:name=".service.MyFirebaseMessagingService"
        android:exported="true"
        >
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
    </service>
    <service
        android:name=".service.MyFirebaseInstanceIdService"
        android:exported="true"
        >
        <intent-filter>
            <action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
        </intent-filter>
    </service>