Tôi đang phát triển một ứng dụng Android đang khiến hệ điều hành đóng băng.Cách ứng dụng có thể đóng băng Android OS
Câu hỏi của tôi khá đơn giản nhưng sau khi tìm kiếm dài, tôi không đến gần câu trả lời hơn.
Câu hỏi đặt ra là, làm thế nào một ứng dụng được đặt hộp cát, làm cho toàn bộ hệ điều hành Android (4.0.4, 4.1.1, 4.1.2) đóng băng?
Cụ thể, toàn bộ hệ điều hành bị treo. Không có logcat, không adb, không có gì! Nó là đông lạnh như một hệ điều hành có thể nhận được. Thiết bị này là Samsung Galaxy Tab 2. Ứng dụng sử dụng UsbManager
và thư viện từ usb-serial-for-android project. Trong khi thư viện có thể sử dụng NDK, ứng dụng của tôi thì không. Về cơ bản, ứng dụng giao tiếp serially với một bảng thích hợp, nhận dữ liệu và gửi các lệnh nối tiếp. Này được thực hiện trên một sợi công nhân được xử lý theo cách này:
try {
thread.interrupt();
thread.join();
while(thread.getState() != Thread.State.TERMINATED){
// wait until thread finishes
}
} catch (InterruptedException e) {
e.printStackTrace();
}
Tất cả đều hoạt động tốt, có nghĩa là cho đến khi đóng băng xảy ra - khi tôi ngắt kết nối cáp USB hoặc hướng dẫn các đối tượng thư viện để ngắt kết nối. Dù bằng cách nào, toàn bộ hệ điều hành không ổn định và sẽ đóng băng ngay lập tức hoặc khi kết nối lại usb (bảng hoặc máy tính). Tôi đã đăng vấn đề đóng băng này cho dự án usb-serial-for-android nhưng chưa nhận được bất kỳ nhận xét nào. Tôi tin rằng tôi đang làm theo các giao thức thích hợp khi nhả usb.
Tôi hiểu nhiều điều có thể xảy ra - ứng dụng của tôi có thể gặp sự cố. al. Nhưng một lần nữa làm thế nào một ứng dụng sandboxed sụp đổ hệ điều hành - nó không có vẻ là rất sandboxed nếu nó có thể làm điều đó.
CẬP NHẬT
Tôi có sau nhiều thử nghiệm thấy rằng bằng cách loại bỏ các dòng thread.interrupt();
rằng nó hoạt động mà không bị rơi ứng dụng hoặc đóng băng hệ điều hành. Nó vẫn đóng băng hệ điều hành nếu USB được rút phích cắm mà không cần tháo dỡ nó trước.
Tôi vẫn muốn hiểu cách ứng dụng hộp cát có thể đóng băng toàn bộ hệ điều hành. Có những ý kiến ở đây mà lảng tránh một câu trả lời, nhưng không phải là một câu trả lời một mình.
đóng băng, như trong bạn thậm chí không thể về nhà bằng nút home? bạn đang sử dụng trình mô phỏng hay thiết bị thực? nếu bạn sử dụng một thiết bị, thiết bị đó là gì? nếu nó được kết nối với máy tính, logcat nói gì? điều gì xảy ra có thể gây ra đóng băng? – Keale
Nhiều thứ. Bạn sẽ phải cụ thể hơn. –
Tôi sẽ tìm kiếm một vòng lặp chặt chẽ với các điều kiện chấm dứt không hài lòng, hoặc hành vi như tự khởi động lại đệ quy.Vì bạn là * (dĩ nhiên) * bằng cách sử dụng điều khiển nguồn, quay lại phiên bản làm việc đã biết cuối cùng và tiến lên phía trước để tìm những thay đổi nào gây ra sự cố. – andy256