2010-10-20 37 views
6

Điều này dường như không được ghi lại tài liệu hoặc tôi bị mất, vì vậy trước khi tôi chạy một loạt các bài kiểm tra của riêng tôi, tôi đã tự hỏi nếu có ai đã biết câu trả lời cho một số câu hỏi này.Vòng đời hoạt động của Android hoạt động như thế nào liên quan đến toàn bộ Ứng dụng?

Trước hết, khi tôi nói "Ứng dụng" tôi đang đề cập đến việc mở rộng lớp Application. http://developer.android.com/reference/android/app/Application.html

Các câu hỏi tôi có như sau, một số câu hỏi có liên quan.

  1. Khi người dùng rời khỏi Hoạt động trong ứng dụng và chuyển sang Hoạt động của một ứng dụng khác, Ứng dụng có bị tạm dừng không, mặc dù nó không có onPause()? Hay liệu nó có tiếp tục được bỏ tạm dừng cho đến khi tất cả các hoạt động của nó bị phá hủy không?

  2. khi nào Ứng dụng dừng lại? Khi tất cả các hoạt động của nó bị phá hủy?

  3. Có khả năng một trong các Hoạt động ứng dụng có thể chạy mà không có cá thể của Ứng dụng hay lớp Ứng dụng sẽ luôn tồn tại nếu một trong các Hoạt động không?

  4. Nếu có một số quá trình đang chạy trên Ứng dụng và tất cả các Hoạt động của nó đều bị tạm dừng, liệu quy trình đó có tiếp tục chạy không?

  5. Ứng dụng có được thực hiện bằng cách xoay vòng theo bất kỳ cách nào hoặc xoay vòng chỉ thay đổi Hoạt động?

Cảm ơn

Trả lời

7
  1. Khi bạn nói ứng dụng không có chế độ onPause vì vậy không có gì xảy ra với ứng dụng. Khi onPause được gọi trong Activity của bạn, không có gì đặc biệt xảy ra, Activity của bạn tiếp tục chạy và có thể làm bất cứ điều gì nó muốn bao gồm chạy các luồng mới, các bộ hẹn giờ có thể tắt, bất cứ điều gì.

  2. Tôi tin rằng những gì bạn đang hỏi là: khi nào một Ứng dụng bị hủy và khi phương thức onTerminate trong một Ứng dụng được gọi? Câu trả lời là khó để xác định và là lên đến hệ thống, nó không nhất thiết phải xảy ra khi tất cả các hoạt động nhận được onDestroyed gọi. Trong thực tế, ngay cả khi onDestroy được gọi, hoạt động của bạn không nhất thiết phải thu gom rác. Khi hệ thống bị thiếu bộ nhớ, quá trình mà Ứng dụng của bạn sống trong đó có thể bị giết, nghĩa là Ứng dụng của bạn sẽ biến mất; onTerminate có thể hoặc không thể được gọi. Vào thời điểm đó tất cả các Hoạt động, Dịch vụ, vv, cũng bị giết.

  3. Ứng dụng luôn được khởi tạo trước, một Hoạt động phải có Ứng dụng được liên kết, giống như cách bạn xác định nó trong tệp AndroidManifest.xml.

  4. Quy trình không bao giờ tạm dừng trong Android, phương thức onPause không thực sự thực sự làm bất cứ điều gì khác ngoài việc yêu cầu bạn tạm dừng mọi thứ trong ứng dụng của mình. Khác hơn là quá trình giữ chugging đi, chủ đề của bạn tiếp tục chạy, ngay cả các chủ đề chính nhận được Intents với một BroadcastReceiver.

  5. Ứng dụng nhận các cuộc gọi lại xoay vòng trong ứng dụng onConfigurationChanged(). Tôi không chắc chắn nếu bạn có thể vô hiệu hóa điều đó vì không có thuộc tính configChanges được hỗ trợ bởi các thẻ ứng dụng trong tệp AndroidManifest.xml.

So sánh tốt với Ứng dụng là trường tĩnh trong bất kỳ lớp học nào của bạn. Các trường tĩnh sẽ tồn tại trong một thời gian dài, quá trình này không bị hủy, giống như Ứng dụng. Các trường tĩnh có thể được truy cập bởi tất cả các hoạt động, dịch vụ, vv (giả sử các trường tĩnh là public), giống như ứng dụng của bạn.

Chúc may mắn! Jacob

0

này được tất cả các giải thích chi tiết ở đây: http://developer.android.com/reference/android/app/Activity.html. Nếu bạn đọc qua nó, bạn nên hiểu mọi thứ.

Bất động nhanh:

  1. Mỗi hoạt động có onPause. Bạn có thể chọn không ghi đè lên nó, nhưng nó sẽ được gọi là dù sao. Ngay sau khi bạn chuyển đi, onPause sẽ được gọi.

  2. Xác định "dừng". Xác định "Ứng dụng". Quá trình này có thể kéo dài mãi mãi, nhưng nó sẽ chỉ đơn giản là ngủ và đợi cho đến khi một trong những hoạt động của nó được bắt đầu.

  3. Không thể có hoạt động nào tồn tại mà không được khởi tạo.

  4. Mỗi mã được thực thi chạy trong một quy trình, vì vậy luôn có một quy trình cho ứng dụng của bạn. Quá trình này sẽ tiếp tục tồn tại sau khi bạn chuyển sang một ứng dụng khác, nhưng nó sẽ ở trạng thái ngủ. Android có thể giết bất kỳ lúc nào nếu tài nguyên hệ thống cạn.

  5. Mỗi khi bạn xoay màn hình, hoạt động của bạn sẽ bị hủy và tạo lại, trừ khi bạn tắt riêng điều đó.

+1

Tôi hỏi về lớp Ứng dụng (http://developer.android.com/reference/android/app/Application.html) không hoạt động. Tôi tự hỏi làm thế nào lớp Ứng dụng hoạt động liên quan đến vòng đời của Hoạt động – cottonBallPaws

+0

và bằng "Dừng", nghĩa là không còn chạy bất kỳ tiến trình nào, và/hoặc tồn tại trong bộ nhớ theo cách mà các Hoạt động có thể truy cập dữ liệu của nó. – cottonBallPaws

+0

Hãy đặt nó theo cách này: Bạn đang cố gắng đạt được điều gì, hoặc bạn đang cố giải quyết vấn đề gì? Bạn cần đối tượng Application để làm gì? – EboMike

2

Cách dễ nhất để hiểu điều này là chỉ cần quên rằng Ứng dụng tồn tại. Ứng dụng không liên quan gì tới vòng đời của ứng dụng. Nó chỉ là một toàn cầu trong một quá trình, có thể hữu ích cho một số thứ, nhưng không cần thiết cho bất cứ điều gì.Mọi thứ về cách một ứng dụng chạy xoay quanh các thành phần Activity, BroadcastReceiver, Service và ContentProvider được khai báo trong .apk của nó.

2

Ví dụ về Ứng dụng có thể tiếp tục tồn tại sau khi Hoạt động cuối cùng của bạn bị hủy. Ngay cả khi TẤT CẢ các hoạt động đã biến mất (nghĩa là tất cả đã có các phương thức onDestroy của chúng được gọi), thì cá thể Ứng dụng vẫn có thể tồn tại.

Ví dụ ứng dụng này có thể được "tái sử dụng" cho những gì bạn có thể nghĩ khác là hai lần chạy ứng dụng riêng biệt của bạn.

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