WakefulBrodcastReceiver / Alert没有响(Wakelock?进程被杀?)

时间:2016-03-27 17:19:43

标签: java android process android-wake-lock

我的应用程序应该是闹钟。如果我将警报时间设置为大约5分钟或30分钟,它会按照应有的方式响铃,但是如果我把它放在4个小时之外,它就不会响,如果我的设备从未接触过夜(过夜),也不会我经常使用它(白天)。

在主要方法中我得到了Wackelock

PowerManager powman = (PowerManager) getSystemService(POWER_SERVICE);
PowerManager.WakeLock wakeLock = powman.newWakeLock(PowerManager.FULL_WAKE_LOCK,"MyWakelockTag");
wakeLock.acquire();

然后我这样打电话给AlarmReceiver

Intent alarmIntent = new Intent(main.this, AlarmReceiver.class);
PendingIntent alarmPendingIntent = PendingIntent.getBroadcast(main.this, 8932, alarmIntent, 0);
AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
manager.set(AlarmManager.RTC_WAKEUP, AlertDate.getTime(), alarmPendingIntent);

最后我的AlarmReceiver看起来像这样:

public class AlarmReceiver extends WakefulBroadcastReceiver
{
    @Override
    public void onReceive(Context context, Intent intent)
    {
        main.Alert(context);
    }
}

我的清单在这里:

<uses-permission android:name="android.permission.WAKE_LOCK" />

...

<application

...

    <receiver
        android:name=".AlarmReceiver"
        android:permission="android.permission.WAKE_LOCK">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED"/>
        </intent-filter>
    </receiver>

</application>

所以非常简短的问题是:为什么main.Alert(context);在较长时间后才被调用?该过程是否可能被Android OS杀死?

1 个答案:

答案 0 :(得分:0)

@ Pixel_95正在做什么main.Alert(context);? 无论如何,PowerManager需要在构造函数(不是PARTIAL)中使用FULL_WAKE_LOCK,或类似的东西,但是当你使用WakefullBroadcastReceiver时,你需要调用completeWakefulIntent(intent);才能唤醒设备,如果你这样做,你就需要不需要PowerManager代码行。