2011-12-19 37 views
5

Tôi đang gặp phải sự cố liên quan đến biến tĩnh mà tôi đang sử dụng trên toàn bộ dự án của mình (nó chứa một số trường từ tệp). Biến mất giá trị của cô trong một số trường hợp, không phải lúc nào. Tôi đã đọc về vòng đời của biến tĩnh, rằng cô ấy mất giá trị trong 3 trường hợp:Biến tĩnh mất giá trị

1) Lớp không được tải.

2) JVM tắt.

3) Quá trình chết.

Vì vậy, tôi có một câu hỏi: Không đủ để viết lại các hoạt động trênResume và phân tích cú pháp tệp một lần nữa và nguồn cấp dữ liệu biến tĩnh một lần nữa nếu nó là null?

+2

Đăng mã có liên quan mà bạn đã thử. – Lion

+0

cảm ơn cho câu trả lời, nhưng với ứng dụng có vẻ như tôi mất các giá trị của tôi, khi ứng dụng chạy trong nền ... –

Trả lời

2

Nếu bạn thực sự phải sử dụng tĩnh/hình cầu đặt chúng vào lớp tùy chỉnh của bạn mở rộng Application. Như thế này:

public class FooApplication extends Application { 
    protected Bar myBar; 

    public Bar getBar() { return myBar; } 
    public void setBar(Bar bar) { myBar = bar; } 
    ... 
} 

Tuyên bố rằng bạn sẽ sử dụng lớp Ứng dụng tùy chỉnh sử dụng tệp kê khai của bạn.

<application 
    android:icon="@drawable/ic_launcher_noteit1" 
    android:label="@string/app_name" 
    android:theme="@style/App_Theme" 
    android:name="FooApplication" 
    android:debuggable="true"> 

Bây giờ bạn có thể truy cập đối tượng ứng dụng của mình từ bất kỳ hoạt động nào sử dụng (FooApplication) getApplication(). Xin lưu ý rằng đây không phải là phương pháp được khuyến nghị. Phương pháp được đề nghị là sử dụng mẫu đơn.

Nếu việc phân tích cú pháp tệp là một hoạt động tốn kém, bạn có thể không muốn phân tích cú pháp trên mỗi onResume. Thay vào đó, bạn có thể muốn xem xét sử dụng onRetainNonConfigurationInstance()

1

Bạn muốn đảm bảo, trước tiên, bạn không vô tình tự mình đặt lại biến đó. Đối với điều này, bạn có thể muốn tạo các hàm getMyVariable()setMyVariable(), đặt một số đăng nhập vào chúng và sử dụng chúng thay vì truy cập trực tiếp vào biến.

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