cách tốt nhất để làm điều này là tạo dịch vụ tùy chỉnh mở rộng dịch vụ của bạn không nhằm mục đích Dịch vụ. và bắt đầu một chuỗi riêng biệt trong dịch vụ của bạn. bắt đầu dịch vụ trong việc tung ra ứng dụng Một điều quan trọng nữa là không ràng buộc nó với bất kỳ dịch vụ gây ra đối tượng nào sẽ bị tiêu diệt khi đối tượng của bạn bị phá hủy. sau đó phương thức onStartCommand() trả về START_STICKY Tôi sẽ cung cấp cho bạn việc triển khai mẫu.
public class CustomService extends Service {
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// TODO Auto-generated method stub
return START_STICKY;
}
@Override
public void onTaskRemoved(Intent rootIntent) {
// TODO Auto-generated method stub
Intent restartService = new Intent(getApplicationContext(),
this.getClass());
restartService.setPackage(getPackageName());
PendingIntent restartServicePI = PendingIntent.getService(
getApplicationContext(), 1, restartService,
PendingIntent.FLAG_ONE_SHOT);
//Restart the service once it has been killed android
AlarmManager alarmService = (AlarmManager)getApplicationContext().getSystemService(Context.ALARM_SERVICE);
alarmService.set(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime() +100, restartServicePI);
}
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
//start a separate thread and start listening to your network object
}
}
onTaskRemoved khởi động lại dịch vụ của bạn sau khi 100milli giây một lần nó bị giết. START_STICKY không hoạt động ở kitkat. Bạn phải thực hiện onTAskRemoved. Và một điều nữa nếu người dùng chuyển đến cài đặt ứng dụng và ngừng dịch vụ của bạn thì không có cách nào bạn có thể khởi động lại dịch vụ này
Nguồn
2014-06-06 09:11:02
Bạn đã xem thiết bị nhận cảnh báo và các mục đích đang chờ xử lý chưa? Họ có thể giữ một dịch vụ đang chạy kể cả khi điện thoại của bạn đang ngủ. – Chucky
Nếu bạn tìm cách giữ cho dịch vụ của mình hoạt động, ngoài việc làm cho dịch vụ này trở thành dịch vụ nền trước, đó là lỗi chính của Android và có thể sẽ được khắc phục. (chỉnh sửa: hay không. hình như tôi không hiểu cách thức hoạt động của START_STICKY) – immibis