là nó có thể ngăn chặn Dịch vụ (startForground) bị giết bởi os? Tôi sử dụng nó để chơi âm thanh nhưng nó bị giết khi tôi sử dụng một ứng dụng khác đòi hỏi nhiều tài nguyên hơn (Angry birds go) trong một thời gian. Trong nhật ký, tôi thấy quá trình ứng dụng bị ActivityManager giết. Tôi nhân rộng cũng với một số ứng dụng âm thanh khác. Chỉ ứng dụng không bị giết là ứng dụng Play Âm nhạc. Nó đã được sao chép trên Android s3 android 4.3.Dịch vụ âm nhạc bị giết ngay cả khi startForground
Trả lời
Có thể ngăn Dịch vụ (startForground) bị giết bởi os không?
No. Android là người quyết định quá trình nào phải dừng lại khi nào. Cách duy nhất là làm cho nó "kém hấp dẫn hơn để bị ngừng lại" bằng cách giảm lượng bộ nhớ mà nó tiêu thụ.
Lưu bộ nhớ. Đưa dịch vụ vào quy trình rất nhỏ của riêng mình. Vì vậy, os android có thể giết chết quá trình chính để đòi lại bộ nhớ và dịch vụ của bạn có thể tiếp tục chạy. Duy trì một mã dịch vụ nhỏ bằng cách chuyển thiết lập và các tùy chọn với mục đích được sử dụng để khởi động dịch vụ.
Lưu ý: Dịch vụ nhỏ phải là dịch vụ nền trước, nghĩa là phải hiển thị biểu tượng trên thanh trạng thái.
manifest cho quá trình riêng biệt
<service
android:name="com.gosylvester.bestrides.ServiceLocationRecorder"
android:process=":bestRidesService" >
</service>
</application>
vượt qua trong cài đặt với mục đích sử dụng để bắt đầu dịch vụ. Chỉ cần khởi động lại dịch vụ để thay đổi cài đặt.
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
boolean isTrackerMarker = SettingMarker.TRACKER_MARKER_DEFAULT;
if (intent != null) {
// intent is processing = b
isMiles = intent.getBooleanExtra(
SettingApplication.APPLICATION_MILE,
SettingApplication.APPLICATION_MILE_DEFAULT);
isRecordAccuracy = intent.getBooleanExtra(
SettingRecord.RECORD_ACCURACY,
SettingRecord.RECORD_ACCURACY_DEFAULT);
locationInterval = intent.getLongExtra(SettingRecord.RECORD_MIlLIS,
SettingRecord.RECORD_PRESET_MEDIUM_MILLIS);
startMillis = intent.getLongExtra(BUNDLE_START_MILLIS, 0);
distance = intent.getDoubleExtra(
ServiceLocationRecorder.BUNDLE_TRACKED_DISTANCE, 0);
recordDistance = (float) intent.getIntExtra(
SettingRecord.RECORD_DISTANCE,
SettingRecord.RECORD_PRESET_MEDIUM_DISTANCE);
boolean newIsRecording = intent.getBooleanExtra(
SettingRecord.RECORDING, isRecording);
isTrackerMarker = intent.getBooleanExtra(
SettingMarker.TRACKER_MARKER,
SettingMarker.TRACKER_MARKER_DEFAULT);
startRecording(newIsRecording);
}
Cảm ơn. Tôi đã thử nó. Tôi đưa dịch vụ vào quá trình khác nhau nhưng tôi cũng bị giết bởi người quản lý ứng dụng sau quá trình chính. Tôi cũng đặt android.os.Process.setThreadPriority (android.os.Process.THREAD_PRIORITY_AUDIO); nhưng nó không giúp được – vandzi
@vandzi tiếp tục tìm kiếm xin lỗi tôi đã không thể giúp đỡ. – danny117
Tôi đã thêm một số chi tiết khác vào câu trả lời. Dịch vụ nhỏ phải là dịch vụ nền trước. Điều này làm giảm xác suất bị giết. Không có giải pháp tốt hơn cho Android. –
Bạn đã cố gắng yêu cầu lấy nét và kiểm soát và mất nó? Tôi nghĩ rằng quản lý ứng dụng này là xa kiểm soát của chúng tôi, nhưng ít nhất bạn có thể làm điều gì đó khi điều này xảy ra.
Tại một thời điểm nào của chu kỳ ứng dụng của bạn, hãy thử một cái gì đó như thế này:
audioManager.requestAudioFocus(new OnAudioFocusChangeListener() {
@Override
public void onAudioFocusChange(int focusChange) {
switch (focusChange) {
case AudioManager.AUDIOFOCUS_GAIN:
// you have the focus, you can start or restarting playing
break;
case AudioManager.AUDIOFOCUS_LOSS:
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
// you lost the focus, you should pause or stop playing
break;
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
// you lost the focus, but your app can continue playing in "duck" mode
break;
default:
}
}
}, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);
Cảm ơn bạn đã trả lời. Tôi giữ audiofocus – vandzi
Hãy nhìn vào câu trả lời của Foreground service being killed by Android bởi Robin Davies, có rất nhiều thông tin:
Just để tóm tắt, đây là cách mọi thứ được cho là hoạt động. Các dịch vụ đang chạy sẽ được dọn dẹp thường xuyên và chấm dứt sau mỗi 30 phút hoặc lâu hơn. Các dịch vụ muốn tồn tại lâu hơn điều này phải gọi Service.startForeground, nơi đặt thông báo trên thanh thông báo để người dùng biết rằng dịch vụ của bạn đang chạy vĩnh viễn và có khả năng hút tuổi thọ pin. Chỉ có 3 quy trình dịch vụ có thể tự đề cử là dịch vụ tiền cảnh tại bất kỳ thời điểm nào. Nếu có nhiều hơn ba dịch vụ tiền cảnh, android sẽ chỉ định dịch vụ lâu đời nhất làm ứng cử viên cho việc nhặt rác và chấm dứt.
Vì vậy, có lẽ có hơn 3 dịch vụ tiền cảnh? Ông cũng giải thích về các lỗi có thể xảy ra trong nền tảng khi ưu tiên các dịch vụ tiền cảnh.
- 1. Android - giữ cho dịch vụ còn sống ngay cả khi quá trình cha mẹ bị giết
- 2. Dịch vụ Foreground bị giết khi nhấp vào Thông báo
- 3. Dịch vụ Android đã bị giết
- 4. Dịch vụ Foreground bị giết bởi Android
- 5. Dịch vụ nhạc nền Android
- 6. giết tất cả child_process khi quá trình nút bị giết
- 7. onStartCommand sau khi quá trình dịch vụ bị giết khi bắt đầu với START_STICKY
- 8. Cách giữ dịch vụ ứng dụng của tôi tiếp tục chạy ngay cả khi ứng dụng bị đóng từ trình quản lý tác vụ trong điện thoại MI
- 9. Dịch vụ khởi động lại bị giết (dừng bởi nhiệm vụ giết người) trong android như Whatsapp
- 10. Tiếp tục phát lại nhạc ngay cả khi thay đổi các trang
- 11. Chạy cuộc gọi lại hợp âm ngay cả khi các tác vụ chính không thành công
- 12. Cách tránh dịch vụ diệt hệ thống khi ứng dụng/hoạt động bị giết
- 13. Dịch vụ định vị trong Safari di động: Không cho phép lưu ... mãi mãi? Ngay cả khi đặt lại
- 14. dịch vụ whatsapp được khởi động lại ngay cả khi tôi buộc dừng ứng dụng như thế nào?
- 15. Ứng dụng "massage viberator" của Android của tôi không ngừng rung ngay cả sau khi quá trình này bị giết?
- 16. Giao dịch có bắt đầu ngay cả khi CHỌN không?
- 17. Hiển thị tất cả âm nhạc trên thẻ SD
- 18. Phát âm thanh trong khi nhạc ipod đang bật (iPad)
- 19. Hoạt động với dịch vụ lâu dài trong nền sẽ không bị giết
- 20. giết subprocess khi quá trình python bị giết?
- 21. nhiệm vụ android giết
- 22. dịch vụ android tự khởi động lại trên ứng dụng bị giết
- 23. Làm thế nào để đối phó với DeadObjectException trên Dịch vụ bị giết?
- 24. dịch vụ bị ràng buộc so với dịch vụ bắt đầu trên Android và cách thực hiện cả hai
- 25. Làm cách nào để giữ cho IntentService hoạt động ngay cả khi ứng dụng bị đóng?
- 26. Làm cách nào để ngăn ứng dụng/dịch vụ Android của tôi bị "giết" khỏi trình quản lý tác vụ?
- 27. Làm thế nào để phát âm thanh qua loa ngay cả khi tai nghe được cắm vào?
- 28. Báo thức trong AlarmManager sẽ bị xóa khi quá trình bị giết
- 29. Làm thế nào để chạy một chuỗi trong nền sau khi ứng dụng bị giết
- 30. Khi nào Dịch vụ bắt đầu và bị ràng buộc bị hủy?
có thể luồng âm thanh đã bị ứng dụng ưu tiên cao hơn chiếm đoạt. – danny117