我有一个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);
答案 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>