Helpex - Trao đổi & giúp đỡ Đăng nhập
32

Tôi đã đọc rằng đó là một sai lầm và một nguồn rò rỉ bộ nhớ trong ứng dụng Android để giữ các tham chiếu lâu dài đến một Ngữ cảnh.

Nhưng tôi không hiểu liệu có thể tạo một lớp trông giống như thế này không:

public class HelperClass {
    private Context context;

    public HelperClass(Context context) {
        this.context = context;
    }
    public void myHelperMethod() {
        // uses this.context
    }
}

Và gọi nó từ một Activity:

public class MyActivity extends Activity {
    public void onCreate(Bundle savedInstanceState) {
        HelperClass h = new HelperClass(this);
        h.myHelperMethod();
    }

    ...
}
32 hữu ích 0 bình luận 16k xem chia sẻ
48

Điều này là tốt và sẽ không gây ra rò rỉ bộ nhớ.

Ngay sau khi onCreatekết thúc thực hiện, hsẽ vượt ra khỏi phạm vi và đủ điều kiện để thu gom rác. Nếu hlà tĩnh, thì bạn sẽ gặp sự cố. Chỉ khi tham chiếu đến ngữ cảnh tồn tại lâu hơn vòng đời của chính ngữ cảnh thì mới xảy ra rò rỉ bộ nhớ. Một vài gợi ý hữu ích:

  • Sử dụng Context.getApplicationContext()khi có thể. Bối cảnh này sẽ tồn tại miễn là ứng dụng của bạn còn sống.
  • Hãy cẩn thận khi sử dụng các trường tĩnh và các lớp bên trong.
  • Chạy ứng dụng của bạn thông qua một hồ sơ để kiểm tra rò rỉ.
48 hữu ích 2 bình luận chia sẻ
7

Phạm vi của HelperClass chỉ nằm trong hàm onCreate của bạn, vì vậy một khi onCreate được thực thi, đối tượng "h" của bạn không còn cần thiết nữa và có thể bị thu gom rác.

Sẽ là một câu chuyện khác nếu "h" là một thành viên tĩnh - ĐÓ sẽ là một cách tuyệt vời để rò rỉ bộ nhớ.

7 hữu ích 0 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ android android-context , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading