2012-01-09 15 views
6

Tôi đã thử nghiệm với ActivityManager.killBackgroundProcesses trong ứng dụng của mình và nhận thấy điều gì đó thú vị. Tôi hy vọng một người nào đó trên stackoverflow có thể làm sáng tỏ điều này.ActivityManager.killBackgroundProcesses khác với "Buộc dừng"

Vì vậy, nếu tôi bắt đầu một ứng dụng, ví dụ: youtube, trước tiên tôi thấy danh sách trang video, sau đó tôi nhấp vào menu-> Cài đặt, tôi sẽ nhận được trang cài đặt. bây giờ nếu tôi nhấp vào nút trang chủ, sẽ đưa youtube vào nền. càng xa càng tốt. Bây giờ, nếu tôi chạy ActivityManager.killBackgroundProcesses để diệt ứng dụng youtube (hoặc tôi sử dụng Advanced task killer mà tôi tin rằng sử dụng cùng một API), và khi tôi khởi động lại youtube, tôi thấy trang cài đặt, không phải danh sách mặc định của trang video.

Nhưng nếu thay vì thực hiện ActivityManager.killBackgroundProcesses, tôi đi tới cài đặt hệ thống-> quản lý ứng dụng-> Youtube-> Buộc dừng và khi tôi khởi chạy lại youtube, tôi nhận danh sách trang video chứ không phải trang cài đặt. Vì vậy, có vẻ như ActivityManager.killBackgroundProcesses khác với lực dừng vì nó vẫn nhớ nhiệm vụ/trang cuối cùng trước khi nó được đặt nền, trong khi lực dừng lại cho bạn một khởi đầu mới.

Bất cứ ai cũng có giải thích tốt cho nó? Có thể trong mã của tôi để làm "buộc dừng" để có được một khởi đầu mới của ứng dụng?

Rất cám ơn!

+0

Chỉ cần làm rõ, ứng dụng tôi đang cố gắng để giết/khởi động lại là ứng dụng của bên thứ ba, chẳng hạn như gmail, youtube, v.v. mà tôi không thể thay đổi mã của họ. – Safecoder

+0

Tìm thấy từ một bài đăng cũ trên Google. http://groups.google.com/group/android-developers/browse_thread/thread/d8fc993c54fe76e1 Vì vậy, có vẻ như "Buộc dừng" đã được triển khai với restartPackage, nhưng trong 2.2, restartpackage đã được gỡ bỏ về cơ bản và về cơ bản nó giống như killbackgroundprocess . Tôi đoán rằng 2.2 và sau đó phải đang sử dụng một API mới để giết quá trình, nhưng nó không phải là tài liệu ... – Safecoder

Trả lời

1

Vâng, tôi không chắc chắn cách sử dụng nó một cách chính xác như tôi chưa bao giờ thử trước với các ứng dụng khác hơn tôi, nhưng Mayby nó sẽ giúp - nghĩ về việc sử dụng: android.os.Process.killProcess(android.os.Process.myPid());

Và về câu hỏi của bạn tại sao hệ thống có thể dừng lại và bạn không thể. Sự thật là hệ thống có thể nhiều hơn nữa. Thêm specyfic, khi bạn nhấn hệ thống nút dừng lực là gửi tín hiệu giết (tín hiệu 9) để xử lý với pid đã cho.

Đây là lý do tại sao tôi nghĩ rằng chức năng trên sẽ giúp ích, bởi vì nó đang gửi gần như, nếu không chính xác cùng một tín hiệu này.

Hy vọng điều đó sẽ hữu ích.

+0

Cảm ơn đề nghị. Nhưng nó không giúp ích cho trường hợp của tôi. killProcess sẽ không giết các ứng dụng mà tôi không sở hữu, ví dụ như gmail, youtube, v.v. Tôi đã thử nó và nó không ảnh hưởng đến các ứng dụng đó. – Safecoder

0

Ghi vào hệ thống bảo mật của hệ điều hành Android mà ứng dụng của bạn không thể chỉ giết một hoạt động khác. Bạn có thể gửi yêu cầu đến hệ thống và sau đó nó sẽ làm tất cả các công cụ cần thiết cho bạn, nếu nó có thể.

Cài đặt là ứng dụng hệ thống, đó là lý do tại sao ứng dụng này có nhiều quyền truy cập hơn ứng dụng của bạn.

Vì vậy, có vẻ như hệ điều hành không cho phép bạn giết ứng dụng. Bạn không chắc chắn, nhưng hãy thử kiểm tra tính năng ứng dụng của bạn - có thể là giải pháp ở đó.

+0

Có và không. killBackgroundProcesses không cho phép bạn đóng quá trình, nhưng có vẻ như nó không phải là một "cứng" gần như lực lượng đóng. Nó vẫn giữ lại một số trạng thái từ lần chạy trước đó như ghi nhớ nơi nó bị bỏ lại lần trước. – Safecoder

+0

Ứng dụng có nằm trong "settings-> manage application" sau .killBackgroundProcesses không? –

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