应用程序在不活动后停止接收GCM通知(android强制应用程序进入停止状态吗?)

时间:2016-04-04 20:04:34

标签: android google-cloud-messaging urbanairship.com

我有一个正确接收通知的应用程序,即使通过滑动杀死了应用程序也是如此。但是,在较长时间不活动(例如,应用程序未使用约2周)后,通知将停止传递。该行为与强制停止的应用程序(http://developer.android.com/about/versions/android-3.1.html#launchcontrols)一致。但是,我确信该申请并未被强制停止。

详细说明,设备接收GCM消息并触发意图,但应用程序无法处理它。有关发送通知时发生的情况的详细信息,请参阅下面的日志摘录。

03-30 19:43:24.596: I/GCM(4931): GCM message com.company.application 0:1459359805552536%60ff11d7f9fd7ecd
03-30 19:43:24.606: W/GCM-DMM(4931): broadcast intent callback: result=CANCELLED forIntent { act=com.google.android.c2dm.intent.RECEIVE pkg=com.company.application (has extras) }

android有时会强制空闲应用程序进入停止状态吗?除了停止状态之外,是否有理由发生这种情况?

如果重要,通知是使用Urban Airship实现的,但在从Parse迁移之前我遇到了类似的问题。

以下代码摘录。

清单

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.company.application"
    android:versionCode="27"
    android:versionName="1.31">

    <uses-sdk
        android:minSdkVersion="11"
        android:targetSdkVersion="21" />

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />

    <permission
        android:name="com.company.application.permission.C2D_MESSAGE"
        android:protectionLevel="signature" />

    <uses-permission android:name="com.company.application.permission.C2D_MESSAGE" />
    <uses-permission
        android:name="android.permission.WRITE_EXTERNAL_STORAGE"
        android:maxSdkVersion="18" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission
        android:name="android.permission.READ_EXTERNAL_STORAGE"
        android:maxSdkVersion="18" />

    <application
        android:name=".MyApplication"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name">
        <activity
            android:name=".Main"
            android:label="@string/app_name"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        ...

        <activity android:name=".ParseDeepLinkActivity">
            <intent-filter>
                <action android:name="android.intent.action.VIEW"/>

                <!-- Handles any vnd.company.application://deeplink URI's -->
                <data android:scheme="vnd.company.application" android:host="deeplink" />

                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="android.intent.category.BROWSABLE"/>
            </intent-filter>
        </activity>
    </application>

</manifest>

应用

public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();

        UAirship.takeOff(this, new UAirship.OnReadyCallback() {
            @Override
            public void onAirshipReady(UAirship airship) {
                // Enable user notifications
                airship.getPushManager().setUserNotificationsEnabled(true);
            }
        });
    }
}

1 个答案:

答案 0 :(得分:0)

您是否正在实施WakeLock对象?您是否为GCM消息设置了keepalive值?我建议你先检查两点或发布更多代码/细节,以便我们了解整个范围:)