2012-03-29 24 views
14

Tôi đã đọc một số bài viết mô tả sự khác biệt giữa onStart()onResume(): onStart() được gọi khi hoạt động hiển thị, onResume() được gọi khi hoạt động sẵn sàng cho tương tác từ người dùng. khỏe.android: khi nào sử dụng onStart(), onStop()?

Tôi luôn thêm mã vào onPause()onResume() và không bao giờ bị làm phiền với onStart()onStop().

Bất kỳ ai cũng có thể đưa ra một số ví dụ cụ thể về những gì bạn có thể làm trong onStart(), so với onResume()? Tương tự, hãy xem onStop()onPause(), cách onStop() hữu ích như thế nào? Tôi phải thiếu cái gì đó cơ bản ở đây.

Trả lời

9

onStop() sẽ (ví dụ) được gọi khi bạn rời khỏi hoạt động đối với một số hoạt động khác (chỉnh sửa:. Gần như thấy commonswares bình luận về các hoạt động theo chủ đề của hộp thoại). Ví dụ: nếu bạn sử dụng startActivity() trong hoạt động A để bắt đầu hoạt động B. Khi bạn nhấn trở lại hoạt động B, bạn sẽ trở lại hoạt động A và onStart sẽ được gọi.

Điều này khác với một số lý do có thể được gọi mà không cần onStop được gọi. Nếu ví dụ màn hình hết thời gian hoặc bạn nhấn nút standy sẽ được gọi, nhưng có thể không phải là onStop (tùy thuộc vào bộ nhớ có sẵn và không có gì), do đó, nó là "tạm dừng nhẹ hơn". onStop có thể sẽ được gọi là cuối cùng ngay cả trong trường hợp này, nhưng không phải ngay lập tức.

Ok, nhưng việc sử dụng

Thường không có sử dụng cụ thể là gì, nhưng có thể có. Vì các hoạt động của bạn sẽ giữ trạng thái bộ nhớ của nó trên stack ngay cả sau khi bạn bắt đầu một số hoạt động khác, ngăn xếp đó sẽ tăng lên với số hoạt động bắt đầu (chiều cao của ngăn xếp). Điều này có thể dẫn đến việc sử dụng bộ nhớ lớn trong một số ứng dụng. Sau một thời gian, khung sẽ khởi động và giết một số hoạt động trên ngăn xếp, nhưng điều này khá thẳng thắn và có thể sẽ có nghĩa là nhiều trạng thái sẽ được giữ lại khi trở về.

Vì vậy, một ví dụ sử dụng cho onStart/onStop là nếu bạn muốn phát hành một số trạng thái khi để lại một hoạt động cho người khác và tạo lại nó khi bạn quay trở lại. Tôi đã sử dụng nó để đặt listadapters thành rỗng, cache hình ảnh trống rỗng và tương tự (trong các ứng dụng rất cụ thể). Nếu bạn muốn giải phóng bộ nhớ được sử dụng bởi các khung nhìn hiển thị trong một listadapter, bạn có thể tạo lại nó trong quá trình khởi động và để cho các khung nhìn được chọn bởi gc. Điều này sẽ làm tăng khả năng rằng phần còn lại của trạng thái bộ nhớ của hoạt động sẽ sống.

Một số tài nguyên có thể được coi là đủ tốt để lưu trong khi thể hiện hoạt động vẫn còn và một số chỉ khi nó ở phía trước ngăn xếp. Bạn có thể quyết định điều gì là tốt nhất trong ứng dụng của mình và mức độ chi tiết của việc tạo/bắt đầu/tiếp tục cung cấp cho bạn điều đó.

+2

"onStop() sẽ được gọi khi bạn rời hoạt động cho một số hoạt động khác" - trên thực tế, nó sẽ được gọi khi hoạt động của bạn không còn hiển thị nữa. Nếu một hoạt động theo chủ đề thoại đến nền trước, 'onStop()' không được gọi. – CommonsWare

+0

Điểm tốt. Hoạt động gọi điện có thể vẫn hiển thị trong nền trong ví dụ đó (và công cụ tái chế sau đó sẽ là xấu). Tôi đã cho thấy một ví dụ về nơi nó xảy ra và làm thế nào tôi đã sử dụng để giảm việc sử dụng bộ nhớ, nhưng đây là một sự miễn trừ tốt. Như một quy luật chung nó vẫn còn tốt. Tôi vẫn chưa thấy các hoạt động của hộp thoại gọi nhau. –

+0

Ồ, không nghi ngờ gì nữa, các hoạt động theo chủ đề thoại là không bình thường. – CommonsWare

0

tôi nghĩ rằng câu hỏi của bạn khá giải thích ở đây trên doc: đọc về Activity Life Cycle

+0

'onStart()' hoạt động sau khi 'onCreate()' kết thúc nhiệm vụ của nó. 'onResume()' hoạt động khi bạn quay lại 'Intent' hoặc' Activity' bằng cách nhấn nút quay lại. –

+1

@ Hamza không đúng. bất cứ lúc nào hoạt động của bạn xuất phát từ việc không hiển thị với hiển thị, onStart() được gọi. –

+0

Không có người đàn ông! Tôi đã làm onStart() trên ứng dụng của mình. Đó là bởi vì, tôi muốn tìm nạp dữ liệu từ webservice sau khi tải hoạt động. Kiểm tra điều này bằng Hướng dẫn Android [link] (http://developer.android.com/reference/android/app/Activity.html) –

1

onStart() hoạt động sau khi onCreate() đã kết thúc tác vụ của nó. Đó là một nơi tốt để đặt một BroadcastReceiver hoặc khởi tạo một số trạng thái về giao diện người dùng sẽ hiển thị nhất quán bất cứ lúc nào người dùng quay lại hoạt động này.

onResume() hoạt động khi bạn quay lại Mục đích hoặc Hoạt động bằng cách nhấn nút quay lại.Vì vậy, onPause sẽ được gọi mỗi khi một hoạt động khác nhau đến với nền trước.

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