Android重复报警呼叫服务,但最终得到;“流程不好”;错误

Android重复报警呼叫服务,但最终得到;“流程不好”;错误,android,service,sharedpreferences,commonsware-cwac,Android,Service,Sharedpreferences,Commonsware Cwac,我的主要活动是使用Commonware提供的方便的WakefulIntentService来安排一个警报,轮询我的服务器以查看数据的变化。当警报响起时,我呼叫服务: Intent backgroundIntent = new Intent(context, PollService.class); WakefulIntentService.sendWakefulWork(context, backgroundIntent); 该服务读取一段服务器数据“token”,并将其与存储在首选项中的“ol

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

Intent backgroundIntent = new Intent(context, PollService.class);
WakefulIntentService.sendWakefulWork(context, backgroundIntent);
该服务读取一段服务器数据“token”,并将其与存储在首选项中的“oldToken”值进行比较。如果令牌不匹配,我将发送一个通知,其中包含启动活动的挂起意图

SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
String oldToken = settings.getString("oldToken", "empty");
Log.d(TAG, "Old token: " + oldToken);
if (!token.equals(oldToken)){
    ...
这在一段时间内可以正常工作,但在随机数小时后,“oldToken”开始返回“empty”,就好像服务无法再访问共享首选项一样

然后,我注意到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
我一直在想这两件事是否有关联。它们似乎同时发生

为什么我会出现“流程不好”的错误?为什么我的服务会丢失与共享首选项的连接


谢谢您的考虑。

您的服务每次重新启动时一定会崩溃(持久性数据不好?)。当这种情况太频繁时,操作系统会“强制停止”服务,从而将其推到错误状态。即使您使用GCM/FCM而不是警报,您也会在这里结束,因为一旦进程变糟,它将无法从Google Play服务接收FCM/GCM的广播。摆脱这种状况的唯一方法是卸载应用程序->关机->卸下并放回电池->重启->安装应用程序

Logcat将显示如下日志,指示取消的广播:

12-06 18:37:31.802 3566-3566/?带GCM-DMM:广播意图回调: 结果=因意图而取消{ act=com.google.android.c2dm.intent.RECEIVE pkg=您的_pkg _name(有附加项)}

还要注意的是,当你的应用程序崩溃时,崩溃对话框会停留5分钟;在这5分钟内,您的应用程序既不会收到任何FCM消息,也不会收到任何其他外部广播(例如,在行动清单中注册的广播\u电源\u连接等)。一旦5分钟过去,对话框消失,你的应用程序就会正常运行

一个典型的例子是一个应用程序,其中onCreate()本身有一个异常。这一个将成为坏进程的主要候选。 应用程序将不会得到自动更新时,通过playstore在坏的状态;但是,它可以通过playstore手动更新。当应用程序状态不好时,它不会通过playstore自动更新;但是,可以通过转到playstore或重新启动手机手动更新。
注意:至少我使用Nexus 5x的经验是,我们不需要卸下电池就可以让应用摆脱坏状态;重新启动就足够了。

我发现这个
过程很糟糕
错误,我不得不保持FCM服务的导出。 加:

或将导出的一起删除

我的服务现在如下所示:

    <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>


似乎你不是唯一一个,不幸的是,似乎没有任何解释或解决方案,只是一些不满意的解决办法,也许可以发布一些关于你正在做什么的详细信息(比如代码)。@ci_uu谢谢,我已经检查了这些问题。我正在深入logcat,看看是否能发现在“进程不好”消息触发时发生的任何可疑情况。你有没有发现这个问题?没有,我离开了警报,去了GCM。似乎是更好的练习。对不起,我帮不上忙了。
    <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>