2010-02-01 44 views
5

Tôi có một ứng dụng Android được mô hình hóa sau ví dụ LunarLander của Google. Tôi đang gỡ lỗi trên thiết bị thực, (Motorola Droid) với Android 2.0. Khi định hướng thay đổi, chương trình bị treo trên NullPointerException. Logcat từ ngay trước khi vụ tai nạn:Lỗi "Đã xảy ra lỗi ở đây, không mong đợi PACKAGE được tiếp tục" trong android Logcat

02-01 00:24:27.956: DEBUG/nate(8358): Starting Game 
02-01 00:24:36.878: DEBUG/dalvikvm(1086): GC freed 1788 objects/92256 bytes in 1389ms 
02-01 00:24:38.542: INFO/WindowManager(1021): Setting rotation to 1, animFlags=0 
02-01 00:24:38.558: INFO/ActivityManager(1021): Config changed: { scale=1.0 imsi=310/4 loc=en_US touch=3 keys=2/1/2 nav=2/2 orien=2 layout=34} 
02-01 00:24:38.620: WARN/UsageStats(1021): Something wrong here, didnt expect org.nifong.leeder to be resumed 
02-01 00:24:38.886: DEBUG/nate(8358): New Surface dimensions: 854x442 
02-01 00:24:38.886: DEBUG/nate(8358): flies was null 

Dòng đầu tiên mà tôi lo lắng là "Something wrong here" tại 24:38.620. Tôi không biết nó có ý nghĩa gì, nhưng tôi nghĩ nó là do tôi không phản ứng đúng với sự thay đổi màn hình.

Tiếp theo, tôi nhận được thông báo gỡ lỗi mà tôi đã tự in từ bên trong phương thức của riêng mình surfaceChanged() về kích thước bề mặt mới.

Sau đó, tôi in thông báo gỡ lỗi về việc ruồi có là null hay không. flies là trường cuối cùng gây ra NullPointerException. Nó được tạo ra một lần, và không bao giờ được viết lại cho phần còn lại của chương trình. Tôi biết rằng nó không phải là null trước vụ tai nạn, bởi vì nó đã được đọc nhiều lần.

Có ai có manh mối về cách biến thành viên riêng tư của tôi bị vô hiệu bởi những manh mối này không?

Tôi sẽ bao gồm mã nhưng có nhiều mã và tôi không biết điều gì sẽ có liên quan.

Trả lời

2

tôi cố định nó bằng cách thêm hai dòng sau để thẻ hoạt động trong file manifest của tôi

android:configChanges="keyboardHidden|orientation" 
android:screenOrientation="landscape" 

này nói rằng ứng dụng của tôi sẽ xử lý thay đổi bàn phím và định hướng ngày của riêng mình (bằng cách không làm gì cả) và thích chạy trong cảnh quan mọi lúc.

+0

Đây có thể là giải pháp cho ứng dụng của bạn, tùy thuộc vào trường hợp sử dụng của bạn. Theo quan điểm của tôi, đây là một hành vi thô lỗ buộc người dùng trong một hành vi sử dụng mà anh ta có thể không thích ... – Janusz

3

Thay đổi hướng trong Android ảnh hưởng đến trạng thái. Về cơ bản, hoạt động của bạn bị phá hủy và tái tạo. Do đó, bạn phải nhận thức được những gì các sự kiện Android lifecycle sẽ được gọi và cách lưu trạng thái.

Bạn cũng cần phải cảnh giác với static trường hợp và cách thức ảnh hưởng đến vòng đời này.

Here is a blog post giải thích một số điều này.

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