Sau khi đọc bài viết Avoiding memory leaks bởi @RomainGuy tôi nhận ra rằng ứng dụng Android hiện tại của tôi bị cản trở với sai lầm khi truyền hoạt động chính của ứng dụng xung quanh. Vì vậy, bất cứ khi nào tôi, tôi chỉ có thể thay thế thông số hoạt động đó bằng Activity.getApplicationContext().Mẫu lệnh để chuyển các phương thức hoạt động của ứng dụng?
Nhưng có một số lớp nhất định trong ứng dụng của tôi vẫn cần chạy các phương thức chỉ có thể là thành viên của hoạt động chính của ứng dụng.
Vì vậy, tôi đã nghĩ đến việc có thể sử dụng Command Pattern để giải quyết vấn đề này.
Vấn đề là, nếu chúng ta nhìn vào ví dụ:
public class SomeCommandExecuableOnlyByActivity implements Command
{
public void execute(Object data)
{
doIt(((MyActivity)data).getWindow());
}
}
Tôi chạy lại vào ngõ cụt của cần đèo quanh hoạt động (lần này cải trang thành Object
dữ liệu).
Làm cách nào để thoát khỏi tình trạng "gà & trứng" này?
Có cách nào tốt hơn để tiếp cận vấn đề này không?
Không có gì trong bài viết đó tuyên bố rằng "chuyển hoạt động chính của ứng dụng xung quanh" là một sai lầm. Đặt nó trong các thành viên dữ liệu tĩnh * là * một sai lầm, và đó là vấn đề cốt lõi đằng sau viên đạn đầu tiên và thứ ba của anh ta ở cuối bài viết. IMHO, chỉ sử dụng 'Ứng dụng' khi bạn biết cụ thể và chính xác tại sao bạn đang sử dụng nó. Nó không phải là một thay thế chăn cho 'Hoạt động', đặc biệt là cho công việc giao diện người dùng. – CommonsWare
@CommonsWare Cảm ơn bạn đã chỉ ra sự khác biệt đáng kể này. Trong trường hợp của tôi, tôi giữ một thành viên dữ liệu SharedPreferences tĩnh trong Hoạt động chính của mình để dễ dàng truy cập bởi các mô-đun khác nhau trong ứng dụng. Vì vậy, tôi có thể truy cập các tùy chọn được chia sẻ bằng cách tránh truyền Hoạt động chính dưới dạng tham số: 'MainActivity.staticPrefs'. Đây có phải là "* Đưa nó vào các thành viên dữ liệu tĩnh *"? – ih8ie8
Đó là một câu hỏi hay. Vì 'SharedPreferences' là một giao diện, và tôi không dễ dàng thấy nơi triển khai cụ thể là gì, tôi không biết. Nếu 'SharedPreferences' không giữ một' Context' - và nó có thể - thì bạn sẽ cần sử dụng 'Application' hoặc tránh thành viên dữ liệu tĩnh. Tôi mong đợi 'Application' hoạt động tốt với' SharedPreferences'. – CommonsWare