2010-09-15 6 views
9

Theo bài viết "Nguyên tắc cơ bản về ứng dụng", phần "vòng đời thành phần", onResume() luôn được gọi khi Chế độ xem trở nên hoạt động, độc lập với trạng thái trước đó.Android - Hướng dẫn Notepad - vòng đời - một số công việc được thực hiện hai lần?

Trong hướng dẫn Notepad, tập 3, tôi đã tìm thấy một cái gì đó khó hiểu trong NoteEdit.java:
Có một cuộc gọi đến populateFields() trong onCreate() cũng như trong onResume().
Nó sẽ không đủ (hoặc thậm chí tốt hơn) để có nó chỉ trong onResume()?

Trong một ví dụ nhỏ như vậy, nó sẽ không làm bất cứ tác hại nếu populateFields() được thực hiện hai lần, nhưng trong một ứng dụng lớn hơn, mọi thứ có thể khác nhau ...

Cảm ơn và Kính trọng,
Markus N.

+2

Yepp, tôi nghĩ việc gọi nó trong onResume cũng chỉ nên tốt hơn. – icyerasor

+0

không hoàn toàn là câu trả lời, nhưng nếu onStop được gọi và sau đó onRestart, onCreate sẽ không được gọi ... vẫn không giải thích tại sao nó được gọi trong onCreate ở tất cả nesides có lẽ quy ước và khả năng đọc – CrackerJack9

+0

onCreate là tốt để khởi tạo tham chiếu đến nội dung, nhưng bạn muốn lưu phần lớn xử lý trạng thái của mình cho onResume mà bạn lưu ý chính xác là địa điểm thích hợp. Cũng lưu ý bạn nên làm điều đó trong AsyncTask để giữ cho người dùng hài lòng! Sơ đồ trên trang Vòng đời hoạt động của Android là tham chiếu tốt nhất và nếu bạn muốn nghiêm ngặt, hãy lập trình hoạt động của máy trạng thái từ đó, vì có một số sự tinh tế dưới sự kết hợp phù hợp giữa màn hình chuyển đổi người dùng, v.v. –

Trả lời

-1

Tôi có thể thấy nơi bạn cần ở cả hai nơi, nếu ứng dụng tạm dừng thì bạn sẽ cần nó trong onResume và nếu quá trình của bạn bị giết hoặc người dùng điều hướng trở lại hoạt động thì bạn sẽ cần nó trong onCreate đặc biệt nếu bạn đang làm một số sơ chế.

mỗi tài liệu .... cho onResume() họ khuyên bạn sử dụng nó cho các cuộc gọi nhẹ không giống như trong onCreate():

"Thời gian tồn tại foreground của một hoạt động xảy ra giữa một cuộc gọi đến onResume() cho đến khi một tương ứng cuộc gọi đến onPause() Trong thời gian này hoạt động ở phía trước của tất cả các hoạt động khác và tương tác với người dùng Một hoạt động thường xuyên có thể đi giữa trạng thái tiếp tục và tạm dừng - ví dụ: khi thiết bị chuyển sang chế độ ngủ, khi hoạt động kết quả được phân phối, khi một mục đích mới được phân phối - do đó, mã trong các phương pháp này phải khá nhẹ. "

N otepad ứng dụng có thể muốn một biến tuyên bố nếu phương pháp đã được nhấn bởi onCreate không làm lại trong onResume().

+0

onResume luôn được gọi (ngay cả khi quá trình bị giết và hoạt động được tái tạo). –

+0

Vâng, nhưng người dùng có thể cần phải làm một cái gì đó trong onCreate trước khi bố trí như vậy và như vậy, do đó tại sao bạn có thể cần phải gọi chức năng đó có quá. – JPM

+0

Phải. onCreate là nơi chính xác cho việc sắp xếp bố trí và tương tự. Tôi chỉ đơn giản nói rằng nếu onCreate được gọi, onResume sẽ luôn được gọi sau nó. –

1

Từ giao diện của Notepad3, tôi sẽ nói bạn là chính xác. Dường như không có lý do gì để họ gọi populateFields() trong cả hai số onCreate()onResume(). onResume là đủ.