使用时
AlarmManager
PendingIntent
s与
Service
被处死的人和被处死的人一样
BroadcastReceiver
s、 在android8(Oreo)和更高版本中,只有BroadcastReceivers在应用程序关闭时才执行。
举个例子:
活动
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
long currentTimeMillis = System.currentTimeMillis();
for (long i = currentTimeMillis; i < currentTimeMillis + 60000; i += 10000) {
Intent serviceIntent = new Intent(getApplicationContext(), TestService.class);
PendingIntent servicePendingIntent = PendingIntent.getService(getApplicationContext(), (int) i, serviceIntent, PendingIntent.FLAG_ONE_SHOT);
Intent receiverIntent = new Intent(getApplicationContext(), TestReceiver.class);
PendingIntent receiverPendingIntent = PendingIntent.getBroadcast(getApplicationContext(), (int) i, receiverIntent, PendingIntent.FLAG_ONE_SHOT);
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, i, servicePendingIntent);
alarmManager.set(AlarmManager.RTC_WAKEUP, i, receiverPendingIntent);
}
}
}
服务
public class TestService extends IntentService {
public TestService() {
super("TestService");
}
@Override
protected void onHandleIntent(@Nullable Intent intent) {
System.out.println("Service");
}
}
接收器
public class TestReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
System.out.println("Receiver");
}
}
<service android:name=".TestService" />
<receiver android:name=".TestReceiver" />
I/System.out: Receiver
I/System.out: Service
I/System.out: Receiver
I/System.out: Service
I/System.out: Receiver
I/System.out: Service
*App closed here*
I/System.out: Receiver
I/System.out: Service
I/System.out: Service
I/System.out: Receiver
I/System.out: Receiver
I/System.out: Service
而在奥利奥,这种情况会发生:
I/System.out: Service
I/System.out: Receiver
I/System.out: Service
I/System.out: Receiver
*App closed here*
I/System.out: Receiver
I/System.out: Receiver
I/System.out: Receiver
I/System.out: Receiver
为什么会这样
全局定时器
使用
服务
他在奥利奥的表现和以前不一样吗?