2010-11-10 32 views
19

Khi tôi nhấn nút ngủ trên Droid, hoạt động của tôi sẽ được gọi. Tại sao điều đó lại xảy ra? Tại sao hệ điều hành muốn gọi OnCreate khi thiết bị đang ngủ? Có cách nào để ngăn chặn nó, hoặc ít nhất biết đó là vì điện thoại đã được đưa vào giấc ngủ?Hoạt động OnCreate được gọi khi điện thoại chuyển sang chế độ ngủ

+1

Bạn chắc chắn ứng dụng của mình không khởi động lại do thay đổi định hướng? –

+0

Nó không phải. Nó xảy ra với chiếc điện thoại ngồi hoàn toàn trên bàn của tôi. Khi tôi nhấn nút ngủ, onDestroy được gọi, sau đó bằng cách nào đó một hoạt động mới đang bắt đầu. – iterator

+0

Tôi nên chỉ ra rằng nó đang chuyển cho tôi một savedInstanceState hợp lệ khi khởi chạy lại. – iterator

Trả lời

22

Điều này xảy ra đặc biệt đối với các hoạt động bị khóa xoay, ví dụ: có điều này trong tệp kê khai trong các thẻ hoạt động:

android:screenOrientation="portrait" 

Khi bạn tắt màn hình để xác định hướng đúng và thay đổi điều đó trước khi tắt.

Vì vậy, có, giải pháp đơn giản là thêm configChanges là tốt, làm cho nó trông giống như thế này:

<activity 
    android:name=".MyActivity" 
    android:screenOrientation="landscape" 
    android:configChanges="orientation" 
/> 

Bạn không cần phải chỉ ra screenOrientation, nhưng nếu bạn không bất cứ định hướng đó là khi nó bắt đầu là nơi nó sẽ ở lại trừ khi bạn viết mã để xử lý các thay đổi cấu hình.

Là một lưu ý phụ, khi tôi bắt đầu thử nghiệm các ứng dụng của mình trên ICS, tôi đã phải xử lý một vài thao tác với một chu trình tạo/hủy/tạo khi bắt đầu một số hoạt động. Một vài kiểm tra bổ sung và số dư là cần thiết để làm cho mã phổ quát.

+0

Bạn có thêm thông tin về cách hoạt động của tính năng này trên ICS không? Tôi đã gặp sự cố này trên các thiết bị chạy 2.3.3 và 4.0.4. Giải pháp của bạn hoạt động trên thiết bị 2.3.3 của tôi, nhưng onCreate() vẫn được gọi sau khi ngủ trên 4.0.4 của tôi. –

+0

Sự cố có thể do thiết bị có định hướng mã hóa cứng cho màn hình khóa. Để kiểm tra cho điều này, làm cho định hướng bị khóa của bạn đối diện (có khả năng chân dung). Điều đó có thể làm cho thêm onCreate biến mất, và cung cấp cho bạn một điểm khởi đầu để tìm cách nuốt thay đổi định hướng không liên quan. – ProjectJourneyman

+8

Cảm ơn bạn. Bạn đa đung. Tôi tìm thấy một giải pháp bằng cách thêm screenSize vào configChanges như thế này 'android: configChanges =" orientation | screenSize "'. Từ tài liệu: "Lưu ý: Nếu ứng dụng của bạn nhắm mục tiêu cấp API 13 trở lên (như được khai báo bởi thuộc tính minSdkVersion và targetSdkVersion), thì bạn cũng nên khai báo cấu hình" screenSize ", vì nó cũng thay đổi khi thiết bị chuyển giữa chế độ dọc và ngang định hướng. " –

8

tôi đã có Prob cùng ứng dụng của tôi (trò chơi) nạp lại bất cứ khi nào nó đến từ giấc ngủ

đây những gì tôi đã làm để giải quyết nó

i thêm

<activity 
    android:configChanges="orientation|screenSize" 
/> 

hy vọng điều này sẽ giúp một ai đó!

+0

Điều này làm việc cho tôi. Cảm ơn – RJB

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