2012-06-29 29 views
6

Chúng tôi đang thử nghiệm ứng dụng Android của chúng tôi trên các thiết bị trong thế giới thực và thông báo một số trong số đó khởi động lại đôi khi sau 2-3 giờ ứng dụng đang chạy. Ứng dụng này bao gồm một dịch vụ với 3 chủ đề (với GPS và mạng) và hai hoạt động, một trong số đó là tiêu thụ tài nguyên (hiển thị bản đồ)Thiết bị Android khởi động lại thỉnh thoảng

Logcat không giúp, vì chúng tôi không thấy bất kỳ thông báo quan trọng nào trước khởi động lại thiết bị. Đôi khi thiết bị thậm chí không khởi động, chỉ việc tháo pin giúp khởi động lại thiết bị.

Thiết bị dựa trên phần cứng khác nhau, được sản xuất ở các quốc gia khác nhau (chủ yếu là PRC, hehe) và sử dụng các phiên bản Android khác nhau.

Các sự cố thường gặp nhất có thể dẫn đến khởi động lại thiết bị là gì và cách gỡ lỗi thiết bị?

+0

10 tháng sau, bạn có biết điều gì đã gây ra nó sau khi tất cả? – jcage

+0

Có vẻ như một số thiết bị bị quá nhiệt khi sử dụng GPS nhiều hơn một giờ. – saabeilin

Trả lời

0

Rất có thể là sự cố quá nóng khi bật bộ thu GPS. Tắt GPS và nhận vị trí từ mạng di động, ứng dụng sẽ tiếp tục chạy trơn tru hàng giờ.

Cảm ơn mọi người vì phản hồi và ý tưởng!

0

Từ thông tin bạn đã cung cấp, có vẻ như bạn rất có khả năng bị rò rỉ Thread. Bạn có thể sử dụng DDMS để phân tích thread usage trong quá trình thực thi của ứng dụng. Một khả năng khác là bạn chỉ đơn giản là hết bộ nhớ ... bạn cũng có thể sử dụng DDMS để giúp bạn thực hiện điều này.

+0

Cảm ơn. Nhưng tại sao dịch vụ và/hoặc hoạt động bị giết và bị GC? – saabeilin

+0

Dịch vụ là các quy trình lâu dài tồn tại ngay cả sau khi ứng dụng ngừng chạy ... vì vậy bạn cần phải hủy đăng ký chúng khi cần thiết. Hoạt động không phải là GC vì hệ thống Android cơ bản sẽ phá hủy các Hoạt động khi thiết bị sắp hết tài nguyên. –

+1

Nếu, như bạn nhận thấy, "... chỉ đơn giản là hết bộ nhớ", các Hoạt động * sẽ * bị giết, phá hủy và giải phóng bộ nhớ, nhưng nó không xảy ra. Các dịch vụ không bị giết hoặc (mặc dù chúng có thể bị giết), và, BTW, dịch vụ và các hoạt động chia sẻ cùng một đối tượng Ứng dụng. Vì vậy, tôi không shure nó là một vấn đề bộ nhớ thấp (tuy nhiên, điều này có thể là một lỗi trong xây dựng OEM andrid?) – saabeilin

1

Tôi đã gặp vấn đề tương tự (cũng là gps và mạng) Tôi đã quên đặt hẹn giờ cập nhật mạng thành sản xuất (15 phút) để thiết bị cập nhật 15 giây một lần bất kỳ cách nào mà thiết bị quá nóng hoặc sau (mong muốn HTC)
Cố gắng hạn chế tối đa việc sử dụng CPU (profiling) hoặc đảm bảo một cơ chế làm mát thích hợp

+0

Có, chúng tôi làm netowrking rất nặng trong gỡ lỗi/thử nghiệm, cộng với máy thu GPS tiêu thụ rất nhiều năng lượng và nóng lên rất nhiều. Nhưng các thiết bị khởi động lại hơi lạnh hơn một chút thì các thiết bị ổn định. Nuvifone của tôi với 2.1, Xperia với 2.x cyanogen, Iconia với 4.0 và một số thiết bị noname chineese với 2.1, 2.2, 2.3.x và 4.x làm việc tuyệt vời, mặc dù chúng cực kỳ nóng (Nuvifone của tôi đã sẵn sàng pha cà phê) . Dù sao, sử dụng CPU là bình thường, truy cập GPS moslty nóng lên. – saabeilin

+0

thiết bị có thể mát hơn từ bên ngoài nhưng nóng hơn ở bên trong nếu tôi hiểu bạn một cách chính xác một thiết bị từ một nhà cung cấp khác nhau có thể có temparature critiacl khác nhau thử nó ra lần lượt đăng nhập và giảm thiểu giao tiếp mạng nó sẽ hoạt động – sherif

3

có hai loại khởi động lại trong Android: lỗi máy chủ

  1. System. Trong trường hợp đó, không cần khởi động lại nhưng thay vào đó, Zygote sẽ khởi động lại. Lý do phổ biến:

    • Cơ quan giám sát đã giết quá trình system_server do bế tắc trong các dịch vụ đang chạy.
    • Trường hợp ngoại lệ nghiêm trọng xảy ra trong một trong các dịch vụ hệ thống. Tuy nhiên, lý do thực tế đôi khi có thể là một vấn đề phần cứng. Ví dụ: trong một số trường hợp sau khi khôi phục cài đặt gốc, phân vùng ext2 không được định dạng như sau. Nó dẫn đến lỗi và phân vùng /data/ được gắn dưới dạng chỉ đọc, tạo ra một loạt lỗi.
    • Trong trường hợp hiếm hoi, cơ quan giám sát có thể hết thời gian vì bộ nhớ cao và mức sử dụng CPU.

    Cả hai đều khá hiếm và có thể được sao chép chủ yếu trong các trường hợp thử nghiệm khỉ, chứ không phải trong trường hợp thực tế. Bạn có thể thấy một ví dụ về đầu ra logcat bằng cách giết chết quy trình service_manager với adb shell.

  2. Hoảng sợ hạt nhân. Trong trường hợp đó, thiết bị thực sự khởi động lại. Khi hoảng loạn hạt nhân xảy ra trên lớp beyound Android, nó sẽ không tạo ra bất kỳ đầu ra logcat nào. Thay vào đó nó sẽ viết một dấu vết stack vào console. Bạn có thể đọc nó từ /dev/kmsg hoặc từ vỏ ADB: adb shell dmesg.

    Rất tiếc, thật khó để đọc những nội dung như trên hầu hết đầu ra của bảng điều khiển thiết bị bị tắt và bộ đệm kmsg sẽ bị xóa trên mỗi lần khởi động lại.

P.S. Cũng khởi động lại có thể do các sự cố phần cứng gây ra. Trong trường hợp đó nó không thể tìm thấy bất kỳ dấu vết nhưng hy vọng điều này sẽ được sao chép chỉ trên các thiết bị cụ thể.

+0

Cảm ơn Andrey . Tôi nghĩ rằng nếu gốc của vấn đề nằm trong Zygote thì chúng ta sẽ thấy một số thông điệp tường trình. Ngay sau khi tôi không nhớ bất kỳ, đó có thể là một KP. Dù sao, chúng tôi sẽ cố gắng giết service_manager và xem sự khác biệt trong nhật ký. – saabeilin

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