我的警报管理器在我的应用程序在Android中被杀死

时间:2016-12-29 09:17:42

标签: android alarmmanager

我有一个AlarmManager每10分钟显示一次Toast。但是当os在后台杀死应用时,我的AlarmManager就不再有用了。我该怎么做?

public class MyReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context con, Intent arg1) {
        Global.ShowMessage(con, Global.GetCurrentDateTime());

    }
}

Manifest.xml

 <receiver android:name=".MyReceiver" > </receiver>
Activity中的

 AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);

        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.SECOND, 10);

        long time = cal.getTimeInMillis();

        Intent i = new Intent(this, MyReceiver.class);

        PendingIntent pi = PendingIntent.getBroadcast(this, 9854, i,  PendingIntent.FLAG_UPDATE_CURRENT);

        // am.set(AlarmManager.RTC_WAKEUP,time,pi);

        am.setInexactRepeating(AlarmManager.RTC_WAKEUP, time, 600 * 1000, pi);

2 个答案:

答案 0 :(得分:1)

来自官方documentation on the lifecycle

  

系统永远不会直接杀死活动。相反,它会杀死活动运行的过程,不仅会破坏活动,还会破坏流程中运行的所有其他活动。

但是你可以创建一个不会被Activity杀死的class Country < ActiveRecord::Base has_many :states end class State < ActiveRecord::Base has_many :cities belongs_to :country end class City < ActiveRecord::Base belongs_to :state end 。更具体地说,您需要一个在前台运行的服务,这不会被系统杀死,如Services documentation

中所述

对于一个具体的例子,我更愿意让Google引导您[示例](https://developer.android.com/reference/android/app/Service.html#startForeground(int,android.app.Notification))。

答案 1 :(得分:-3)

将此代码附加到清单中。

 <receiver android:name=".MyReceiver"
                android:enabled="true"
                android:exported="true">

                <intent-filter>
                    <action android:name="android.intent.action.BOOT_COMPLETED" />
                </intent-filter>

            </receiver>