您可以使用JobIntentService的stopService方法来取消正在运行的服务。这是一个使用JobIntentService和BroadcastReceiver的示例解决方案:
首先,创建一个继承自JobIntentService的自定义服务类,例如MyJobIntentService:
public class MyJobIntentService extends JobIntentService {
private static final int JOB_ID = 1001;
public static void enqueueWork(Context context, Intent work) {
enqueueWork(context, MyJobIntentService.class, JOB_ID, work);
}
@Override
protected void onHandleWork(@NonNull Intent intent) {
// 执行后台任务
}
@Override
public void onDestroy() {
super.onDestroy();
// 执行在活动关闭时取消服务的操作
// 例如发送广播通知取消服务
Intent broadcastIntent = new Intent("CANCEL_JOB");
sendBroadcast(broadcastIntent);
}
}
然后,在您的活动中注册一个广播接收器,用于接收取消服务的广播通知:
public class MainActivity extends AppCompatActivity {
private BroadcastReceiver cancelJobReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// 取消服务
MyJobIntentService.stopService();
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 注册广播接收器
IntentFilter intentFilter = new IntentFilter("CANCEL_JOB");
registerReceiver(cancelJobReceiver, intentFilter);
// 启动服务
MyJobIntentService.enqueueWork(this, new Intent());
}
@Override
protected void onDestroy() {
super.onDestroy();
// 取消注册广播接收器
unregisterReceiver(cancelJobReceiver);
}
}
最后,在您的活动关闭时,MyJobIntentService的onDestroy方法会被调用,发送一个广播通知取消服务。广播接收器会接收到该通知并调用MyJobIntentService的stopService方法来取消服务。