2010-03-07 27 views
6

Trong API 1.6, có cách nào để đảm bảo rằng phương thức onStart() của Dịch vụ được gọi sau khi dịch vụ bị giết do áp lực bộ nhớ ? Từ các bản ghi, có vẻ như là "quá trình" mà dịch vụ thuộc về được khởi động lại, nhưng bản thân dịch vụ thì không. Tôi đã đặt một cuộc gọi Log.d() trong phương thức onStart() và không đạt được điều này."Lập kế hoạch khởi động lại dịch vụ bị lỗi", nhưng không có lệnh gọi tới onStart() theo sau

Để kiểm tra dịch vụ của mình dưới áp lực bộ nhớ, tôi sinh ra nó từ một hoạt động, sau đó khởi chạy trình duyệt web và truy cập một số trang web Javascript nặng như Slashdot cho đến khi dịch vụ của tôi bị giết. Các logcat đọc:

03-07 16:44:13.778: INFO/ActivityManager(52): Process com.kostmo.charbuilder.full (pid 2909) has died. 
03-07 16:44:13.778: WARN/ActivityManager(52): Scheduling restart of crashed service com.kostmo.charbuilder.full/com.kostmo.charbuilder.DownloadImagesService in 5000ms 
03-07 16:44:13.778: INFO/ActivityManager(52): Low Memory: No more background processes. 
03-07 16:44:13.778: ERROR/ActivityThread(52): Failed to find provider info for android.server.checkin 
03-07 16:44:13.778: WARN/Checkin(52): Can't log event SYSTEM_SERVICE_LOOPING: java.lang.IllegalArgumentException: Unknown URL content://android.server.checkin/events 
03-07 16:44:18.908: INFO/ActivityManager(52): Start proc com.kostmo.charbuilder.full for service com.kostmo.charbuilder.full/com.kostmo.charbuilder.DownloadImagesService: pid=3560 uid=10027 gids={3003, 1015} 
03-07 16:44:19.868: DEBUG/ddm-heap(3560): Got feature list request 
03-07 16:44:20.128: INFO/ActivityThread(3560): Publishing provider com.kostmo.charbuilder.full.provider.character: com.kostmo.charbuilder.provider.ImageFileContentProvider 
+2

'onCreate()' được gọi, không phải 'onStart()', vì không ai yêu cầu bắt đầu hoặc ràng buộc. Bạn cần phải tắt dịch vụ (hoặc nếu không khởi động nó, nếu cần thiết) vào thời điểm này. –

Trả lời

6

Theo tiết lộ của bình luận Chistopher của trên, mặc dù các bản ghi nội dung là "Scheduling restart of crashed service", điều này không thực sự có nghĩa là phương pháp onStart() sẽ được gọi. Tuy nhiên, onCreate() thực sự sẽ được gọi và ứng dụng của bạn có thể gọi số onStart() từ đó.

Các vấn đề liên quan