Điều gì xảy ra với một chương trình đang chạy khi nhấn nút Home của nhà mạng trên điện thoại Android?


27

Một điều đánh đố tôi. Có vẻ như nếu tôi sử dụng một số chương trình trên Android và nhấn nút "home", tôi thấy màn hình chính và có thể chạy lại chương trình và xem chương trình đó ở trạng thái như trước - vì vậy có vẻ như chương trình chưa được khởi động lại hoàn toàn, chỉ bị đình chỉ và sau đó tiếp tục.

Tuy nhiên, điều đó dường như không xảy ra nhất quán với trò chơi Air Control. Thỉnh thoảng khi tôi chơi Air Control và nhấn "home" và sau đó chạy lại Air Control - nó bị tạm dừng (như thể tôi nhấn nút "tạm dừng") và tôi có thể tiếp tục trò chơi. Đôi khi, điều tương tự dẫn đến Air Control bỏ trò chơi và bắt đầu lại.

Vì vậy, có vẻ như tôi không hiểu điều gì đó.

Thỏa thuận ở đây là gì? Điều gì xảy ra với một chương trình khi "nhà" được nhấn? Nó tiếp tục chạy hay nó làm gì?


Tôi nghi ngờ rằng nhấn nút home dẫn đến tiêu hao năng lượng cao hơn.
Lưu lượng

Câu trả lời:


12

Nhấn các Homenút để chuyển bạn từ ứng dụng sang màn hình chính, trong khi để ứng dụng của bạn chạy ẩn. Điều này hơi giống như chuyển đổi giữa các cửa sổ trên PC Windows.

Ngoại trừ khi điện thoại của bạn sắp hết tài nguyên như bộ nhớ, nó sẽ bắt đầu đóng các ứng dụng đang chạy ẩn, để điện thoại của bạn có đủ tài nguyên cho những gì bạn đang cố gắng thực hiện. Các trò chơi thường nằm trong số các ứng dụng đầu tiên mà điện thoại sẽ "tiêu diệt" để tiết kiệm tài nguyên vì chúng thường sử dụng nhiều bộ nhớ và CPU hơn các ứng dụng khác. Đây là lý do tại sao đôi khi trò chơi của bạn vẫn đang bị tạm dừng và đôi khi Android đã đóng nó cho bạn.

Các Backnút là cách để các ứng dụng gần như vậy mà họ đang thực sự đóng cửa.

Xem thêm Cách đóng ứng dụng trong Android là gì?


26

Các tác vụ tài liệu phát triển Android và Back Stack thực sự bao gồm điều này khá độc đáo. Một đoạn trích có liên quan:

Tác vụ là một đơn vị gắn kết có thể di chuyển đến "nền" khi người dùng bắt đầu tác vụ mới hoặc đi đến Màn hình chính, thông qua phím HOME. Khi ở chế độ nền, tất cả các hoạt động trong nhiệm vụ đều bị dừng, nhưng ngăn xếp phía sau cho nhiệm vụ vẫn còn nguyên vẹn, nhiệm vụ chỉ đơn giản là mất tập trung trong khi một nhiệm vụ khác diễn ra, như trong hình 2. Một nhiệm vụ sau đó có thể quay lại " tiền cảnh "để người dùng có thể chọn nơi họ rời đi. Ví dụ, giả sử rằng tác vụ hiện tại (Nhiệm vụ A) có ba hoạt động trong ngăn xếp của nó hai trong hoạt động hiện tại. Người dùng nhấn phím HOME, sau đó khởi động một ứng dụng mới từ trình khởi chạy ứng dụng. Khi màn hình chính xuất hiện, tác vụ A sẽ đi vào nền. Khi ứng dụng mới khởi động, hệ thống sẽ khởi động một tác vụ cho ứng dụng đó (Nhiệm vụ B) với ngăn xếp hoạt động của riêng nó. Sau khi tương tác với ứng dụng đó, người dùng trở lại Home một lần nữa và chọn ứng dụng ban đầu bắt đầu Nhiệm vụ A. Bây giờ, Nhiệm vụ A đến tiền cảnh, cả ba hoạt động trong ngăn xếp của nó đều còn nguyên vẹn và hoạt động ở đầu ngăn xếp lại tiếp tục. Tại thời điểm này, người dùng cũng có thể chuyển về Nhiệm vụ B bằng cách về Trang chủ và chọn biểu tượng ứng dụng đã bắt đầu tác vụ đó (hoặc bằng cách chạm và giữ phím HOME để hiển thị các tác vụ gần đây và chọn một tác vụ). Đây là một ví dụ về đa nhiệm trên Android. người dùng cũng có thể quay lại Nhiệm vụ B bằng cách về Trang chủ và chọn biểu tượng ứng dụng đã bắt đầu tác vụ đó (hoặc bằng cách chạm và giữ phím HOME để hiển thị các tác vụ gần đây và chọn một tác vụ). Đây là một ví dụ về đa nhiệm trên Android. người dùng cũng có thể quay lại Nhiệm vụ B bằng cách về Trang chủ và chọn biểu tượng ứng dụng đã bắt đầu tác vụ đó (hoặc bằng cách chạm và giữ phím HOME để hiển thị các tác vụ gần đây và chọn một tác vụ). Đây là một ví dụ về đa nhiệm trên Android.

Lưu ý: Nhiều tác vụ có thể được giữ trong nền cùng một lúc. Tuy nhiên, nếu người dùng đang chạy nhiều tác vụ nền cùng một lúc, hệ thống có thể bắt đầu hủy các hoạt động nền để khôi phục bộ nhớ, khiến trạng thái hoạt động bị mất. Xem phần sau về trạng thái Hoạt động.

Tóm tắt : Tác vụ được chuyển sang nền khi bạn nhấn Homevà ngồi trong bộ nhớ, không thực sự làm gì và giữ trạng thái của nó. Điều này có nghĩa là (nói chung) bạn có thể chuyển trở lại nhiệm vụ và nó sẽ chọn nơi nó rời đi. Tuy nhiên, hệ thống Android có thể - và sẽ - giết các tác vụ nền nếu cần lấy lại bộ nhớ. Khi nào và nếu điều này xảy ra hoàn toàn phụ thuộc vào hệ thống, và có lẽ là lý do tại sao bạn thấy hành vi không nhất quán khi tiếp tục.

Nếu tác vụ bị hệ thống phá hủy, nó sẽ phải được tạo lại khi bạn khởi chạy lại. Vì vậy, trừ khi tác giả ứng dụng đã thực hiện các biện pháp để lưu trạng thái của ứng dụng trong quá trình hủy, nó sẽ bị mất (và lưu trạng thái chính xác trong những thứ như trò chơi là không thực tế).

Một tài liệu hay khác (nhưng cũng dài dòng) là tài liệu bao gồm Vòng đời hoạt động (có một sơ đồ đẹp nếu bạn cuộn xuống một chút).


Vì vậy, chúng bị giết trên cơ sở mỗi nhiệm vụ, không phải trên cơ sở mỗi hoạt động / quy trình. Cái sau sẽ cho phép giết một phần nhiệm vụ, có lẽ là không mong muốn.
jiggunjer

4

Bấm phím Home cho phép người dùng bắt đầu Tác vụ mới, bằng cách hiển thị trình khởi chạy. Tất cả các Tác vụ đang hoạt động (và do đó Hoạt động bao gồm ví dụ "Điều khiển không khí" của bạn) sẽ gọi phương thức của chúng onPause().

Tùy thuộc vào Ứng dụng (và Hoạt động của họ) để khôi phục trạng thái chính xác trước đó khi nó hiển thị trở lại. Cũng có thể Quy trình ứng dụng bị hủy trong khi Hoạt động được chạy nền, nhưng điều này sẽ không ảnh hưởng đến trải nghiệm của người dùng. Người dùng không thể nhận ra sự khác biệt nếu một Hoạt động vừa bị tạm dừng hoặc nếu nó cũng bị giết. Điều này có thể giải thích hành vi khác nhau của Air Control, đây có thể là gợi ý về việc triển khai lỗi quản lý vòng đời của Android.


Tôi nghĩ rằng "giết" bạn có nghĩa là dừng lại, trái ngược với bị phá hủy. Tôi tin vào thuật ngữ Linux thông thường khi bạn giết một quá trình (ví dụ Hoạt động) cho bạn destroy()các thành phần ứng dụng tương ứng.
jiggunjer

Không, ý tôi là bị phá hủy.
Dòng chảy

Khi bạn nhấn phím home, onStopphương thức được gọi. Một quá trình bị giết không có nghĩa là hoạt động được onDestroyedgọi là phương thức của nó , mặc dù nó thực sự tương tự. "Giết" một quy trình Hoạt động có nghĩa là VM được xóa khỏi RAM. Đối với tôi điều này (Android giết nó) dường như có thể ảnh hưởng đến trải nghiệm người dùng.
jiggunjer

4

Danh tiếng của tôi vẫn còn quá thấp trên trang web này để bỏ phiếu, vì vậy tôi đang trả lời để nhấn mạnh câu trả lời của Flow. Tôi tiếp tục gặp vấn đề này trong một trong những ứng dụng của mình. Tôi có nhiều điều khiển spinner khác nhau và bạn phải lưu rõ ràng trạng thái của chúng trong onPause () và sau đó khôi phục trạng thái trong onResume () - Android không tự động nhớ trạng thái của chúng.

Một điều phức tạp khác là đôi khi Android sẽ gọi hàm onCreate () của ứng dụng khi bạn chỉ mong đợi nó gọi onResume ().

Vì vậy, vấn đề của bạn với Air Control (hoặc bất kỳ ứng dụng nào khác) là dành riêng cho ứng dụng đó và bạn nên báo cáo hành vi cho nhà phát triển để khắc phục. Hầu hết các ứng dụng đều có email liên hệ trên Thị trường.

BTW, nếu bạn muốn hiểu về vòng đời của ứng dụng, tôi khuyên dùng Chương 2 của Hello, Android, đặc biệt là hình 2.3.


3

Nút Home Nhấn khi ở trong ứng dụng:

Hầu hết các ứng dụng sẽ lưu trạng thái của chúng (bất kỳ bit dữ liệu nào cần thiết để giữ cho nó nhất quán khi được tiếp tục lại) và thiết bị sẽ chuyển sang ứng dụng launcher.

Nút Home Nhấn khi trên màn hình Home:

Đây là cấu hình của nhiều launcher bên thứ 3; tuy nhiên rất nhiều trong số chúng mặc định đưa bạn trở lại màn hình chính "chính" (trình khởi chạy mặc định thực hiện việc này).

Những gì bạn của bạn có thể quan tâm:

Việc chuyển đổi ứng dụng có thể gây tốn bộ nhớ và khiến một số ổ đĩa ghi dữ liệu. Điều này sử dụng pin; tuy nhiên, đây thường không phải là nguyên nhân chính gây hao pin trên thiết bị (hệ điều hành được tối ưu hóa để thực hiện những việc này).

Một số ứng dụng sẽ tiếp tục chạy dưới dạng ứng dụng nền, vì vậy, nhấn nút home sẽ không giết chúng (ví dụ: Google Play Music vẫn sẽ phát sau khi nhấn nút home).

Bạn của bạn có thể lo ngại rằng bằng cách nhấn nút home, bạn đã không thoát khỏi chương trình và do đó nó vẫn đang chạy. Android sẽ dỡ các ứng dụng đó khi cần thiết.

Bạn và bạn của bạn nên quan tâm nhiều hơn đến màn hình - nơi sử dụng nhiều năng lượng nhất.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.