2010-03-13 29 views
8

Có điều gì đó trong nguyên tắc dành cho nhà phát triển Android không cho phép nhà phát triển cung cấp tùy chọn "thoát" (ngừng chạy) một ứng dụng từ bên trong ứng dụng chính nó?Tại sao ứng dụng Android không cung cấp tùy chọn "Thoát"?

Tôi thích đa nhiệm và tất cả nhưng nó không phải là rõ ràng với tôi lý do tại sao:

  • đại đa số các ứng dụng không có chức năng Exit riêng của họ và do đó chỉ tiếp tục chạy mãi mãi
  • không cung cấp cho bạn một sự lựa chọn về việc chạy khi bạn bật điện thoại - họ chỉ làm theo mặc định

cả hai điều dẫn đến sử dụng bộ nhớ không ngừng tăng lên và điện thoại của bạn chạy với hiệu suất này gánh nặng tất cả các thời gian mặc dù thực tế rằng bạn chỉ có thể muốn một số ứng dụng nhất định chạy một số thời gian.

Tôi có thiếu gì đó không?

+0

bản sao có thể có của [Thoát ứng dụng - được tán thành?] (Http://stackoverflow.com/questions/2033914/quitting-an-application-is-that-frowned-upon) –

Trả lời

14

Có cái gì đó trong hướng dẫn Android nhà phát triển rằng disuadea phát triển từ việc cung cấp các tùy chọn để "thoát" (ngừng chạy) một ứng dụng từ bên trong ứng dụng bản thân?

Có. Nói chung là không cần thiết, cũng giống như thường không cần khởi động lại máy chủ Web vì một số người dùng có trình duyệt quyết định (s) anh ta đã làm xong với một ứng dụng Web.

đại đa số các ứng dụng không có chức năng Exit riêng của họ và do đó chỉ tiếp tục chạy mãi mãi

Họ không tiếp tục chạy mãi mãi. Android sẽ đóng mọi thứ khi cần.

không cung cấp cho bạn một sự lựa chọn về việc chạy khi bạn bật điện thoại - họ chỉ làm theo mặc định

Những nhà phát triển aren't paying attention to me.

Cả hai điều dẫn đến bộ nhớ sử dụng không ngừng tăng lên

Nói chung, nó không. Nếu bạn tìm thấy các ứng dụng cụ thể thực hiện việc này, hãy gỡ cài đặt chúng.

và thiết bị của bạn chạy với gánh nặng hiệu suất này tất cả các thời gian

Nói chung, nó không. Nếu bạn tìm thấy các ứng dụng cụ thể thực hiện việc này, hãy gỡ cài đặt chúng.

Ngoài ra, câu hỏi này trùng lặp với this one.

+0

Để cho vay một số hỗ trợ tuyên bố của OP, tôi sử dụng kẻ giết nhiệm vụ nâng cao và thường thấy một loạt các ứng dụng được liệt kê trong đó từ lâu đã bị đóng và tôi không thể nghĩ tại sao chúng vẫn chạy trong nền. Danh sách đó có liên quan không, ví dụ: là những điều xuất hiện một chi tiết thực hiện hoặc bộ nhớ đệm và không chi phí bất cứ điều gì?(Lưu ý: Đây là các ứng dụng đi kèm với điện thoại, không phải những thứ tôi đã cài đặt.) – HostileFork

+0

Bạn cho rằng ATK đang báo cáo chính xác những gì đang chạy. Android giữ bộ nhớ cache của các quy trình từ các ứng dụng đã được chạy nhưng hiện đã bị chấm dứt. Bộ nhớ cache này sau đó có thể được sử dụng khi bạn khởi động các ứng dụng khác sau này, để tiết kiệm thời gian forking quá trình và khởi tạo thời gian chạy Dalvik. Các quy tắc chính xác cho khi nó sử dụng một quá trình ra khỏi bộ nhớ cache, tất nhiên, không được biết đến. Chỉ vì ATK xác nhận điều gì đó có trong RAM không có nghĩa là nó gây ra bất kỳ tác hại nào (ví dụ: sử dụng CPU, ngăn các quá trình khác không có RAM). – CommonsWare

+3

Các quy tắc được cho là được ghi lại ở đây: http://developer.android.com/guide/topics/fundamentals.html#proclife Tài liệu khóa học luôn có thể được cải thiện. :) Ngoài ra nếu bạn thực sự muốn xem điều gì đang xảy ra, bạn có thể sử dụng "hoạt động dumpb shell adb" - trong đầu ra đó là danh sách tất cả các quy trình với hệ thống phân cấp bộ nhớ hiện tại (giá trị adj =) Các tiến trình có số cao hơn sẽ bị giết trước các số có số thấp hơn. Các con số ánh xạ tới các danh mục có trong tài liệu, mặc dù các giá trị chính xác đã thay đổi trên các phiên bản nền tảng. – hackbod

1

Về cơ bản, không cần nút thoát miễn là nhà phát triển thực hiện tốt công việc thiết kế ứng dụng của họ. Các hoạt động Android bị dừng lại khi chúng không hiển thị và tài nguyên là cần thiết ở nơi khác, do đó, không còn tiêu tốn tài nguyên nữa. Bạn có thể đọc về vòng đời here:

Dưới đây là một related question:

8

"Cả hai điều dẫn đến sử dụng bộ nhớ không ngừng tăng lên"

nào không quan trọng kể từ khi ứng dụng Android được giới hạn cho một số tiền cố định RAM. Giải phóng RAM sẽ không cung cấp nhiều RAM hơn cho các ứng dụng khác.

+0

Giới hạn cho mỗi ứng dụng hoặc toàn hệ thống? Có ít bộ nhớ còn lại cho hệ thống dẫn đến hiệu suất tổng thể chậm hơn không? Tôi không thể tưởng tượng rằng hiệu suất vẫn không đổi với 5 ứng dụng đang chạy so với 10. – Howiecamp

+2

Giới hạn cho mỗi ứng dụng. Và khi hệ thống cần RAM, nó sẽ giết chết các quá trình. Hiệu suất sẽ giảm nếu các ứng dụng đang sử dụng CPU, nhưng các ứng dụng thường bị tạm dừng hoặc dừng lại khi được đặt ở chế độ nền (trừ khi được viết sai.) –

1

Từ trang Android Application Fundamentals của Google:

Tắt các thành phần Một nhà cung cấp nội dung này chỉ hoạt động khi nó đáp ứng một yêu cầu từ một ContentResolver. Và một bộ thu phát sóng chỉ hoạt động khi nó đang phản hồi một tin nhắn quảng bá. Vì vậy, không cần phải tắt các thành phần này một cách rõ ràng.

Các hoạt động, mặt khác, cung cấp giao diện người dùng. Họ đang ở trong một cuộc trò chuyện dài với người dùng và có thể vẫn hoạt động, ngay cả khi không hoạt động, miễn là cuộc hội thoại vẫn tiếp tục. Tương tự, các dịch vụ cũng có thể vẫn chạy trong một thời gian dài. Vì vậy, Android có các phương pháp để tắt các hoạt động và dịch vụ theo cách có trật tự:

Một hoạt động có thể được tắt bằng cách gọi phương thức finish() của nó. Một hoạt động có thể tắt hoạt động khác (một hoạt động bắt đầu bằng startActivityForResult()) bằng cách gọi finishActivity(). Một dịch vụ có thể được dừng lại bằng cách gọi phương thức stopSelf() của nó, hoặc bằng cách gọi Context.stopService(). Các thành phần cũng có thể bị tắt bởi hệ thống khi chúng không còn được sử dụng hoặc khi Android phải đòi lại bộ nhớ cho các thành phần hoạt động hơn. Phần sau, Component Lifecycles, thảo luận về khả năng này và các nhánh của nó chi tiết hơn.

Vì vậy, có vẻ như Nhà cung cấp nội dung và Người phát sóng không bao giờ được tắt rõ ràng vì họ đang trơ ​​trong khi không xử lý các sự kiện cụ thể của họ.

Đối với hoạt động, tôi sẽ tranh luận ủng hộ việc chấm dứt nó, nhưng trong một số trường hợp nhất định. Nếu ứng dụng của bạn có trạng thái hữu hạn trong đó người dùng được thực hiện bằng cách sử dụng nó, tại sao giữ cho nó tồn tại cho đến khi GC nhận được nó? Người quản lý hoạt động vẫn cần theo dõi Hoạt động đó trong khi người dùng đã hoàn thành nhiệm vụ của mình. Ví dụ tốt nhất của tôi cho điều này là Máy tính. Bạn mở nó, bạn có nó giải quyết một vấn đề cho bạn, và sau đó bạn đóng nó lại. Nếu hàm onCreate quá tốn kém thì nó sẽ hiệu quả hơn khi thực hiện onCreate một lần và sau đó onRestart bất cứ khi nào người dùng moseys quay trở lại ứng dụng của bạn thì có thể bạn đang làm điều gì sai. Có lẽ tôi hiểu sai cách Android xử lý Hoạt động và nếu tôi luôn quan tâm đến việc tìm hiểu thêm :)

-1

Tất cả đều trả lời câu trả lời rằng người dùng muốn kiểm soát toàn bộ danh sách chạy và tự động bắt đầu của họ và những gì họ làm và không muốn cài đặt, ví dụ: bản đồ google, v.v. không có hai cách về điều này.

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