AlarmManager可以在应用程序被杀死的情况下在后台工作。它可以使用PendingIntent来启动我们的Activity、BroadcastReceiver或Service。但是,使用Service是一个更好的选择,因为它可以在后台持续运行,而且可以更好地控制时间间隔。以下是一个示例代码,它使用AlarmManager和Service在后台执行操作:
MainActivity.java
public class MainActivity extends AppCompatActivity {
private Intent serviceIntent;
private PendingIntent pendingIntent;
private AlarmManager alarmManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Create Pending Intent to start Service
serviceIntent = new Intent(MainActivity.this, MyService.class);
pendingIntent = PendingIntent.getService(MainActivity.this, 0, serviceIntent, PendingIntent.FLAG_UPDATE_CURRENT);
// Create Alarm Manager with interval of 1 minute
alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
long interval = 60 * 1000;
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + interval,
interval, pendingIntent);
}
@Override
protected void onDestroy() {
super.onDestroy();
// Cancel Alarm Manager
alarmManager.cancel(pendingIntent);
}
}
MyService.java
public class MyService extends Service {
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// Do some background tasks here
Toast.makeText(this, "Task is running in the background", Toast.LENGTH_LONG).show();
return START_STICKY;
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
在这个示例中,我们使用AlarmManager的setRepeating方法来设置启动我们的Service,该Service运行一些后台任务。我们还在MainActivity的onDestroy方法中取消AlarmManager。