2013-01-23 31 views
6

Tôi muốn thực hiện hành động/sự kiện khi ứng dụng bị giết từ trình quản lý tác vụ hoặc bất kỳ ứng dụng nào khác. Có cách nào để thực hiện hành động khi ứng dụng bị giết không. Ứng dụng của tôi đang chạy ở chế độ nền như dịch vụ. Nếu tôi chấm dứt ứng dụng thì dừng dịch vụ chính. Tôi muốn bắt đầu lại.Hành động trên ứng dụng bị giết trong android

+0

Hãy nhớ rằng nói chung các dịch vụ luôn bật lên do tác động của chúng trên thiết bị (sử dụng CPU, tuổi thọ pin, v.v.). Nó có thể giúp đỡ nếu bạn cung cấp thêm chi tiết về kịch bản của bạn là gì, để mọi người ở đây có thể cung cấp cho bạn các cách tiếp cận khả thi hơn để đạt được nó. –

+1

"Tôi muốn bắt đầu lại" - điều bạn muốn không quan trọng. Những gì * người dùng của bạn * muốn có vấn đề. Nếu người dùng của bạn muốn ứng dụng của bạn đang chạy, họ sẽ không buộc phải dừng ứng dụng đó. Nếu bạn không tôn trọng người dùng của bạn, không ai sẽ tôn trọng bạn. – CommonsWare

Trả lời

9

Không, không có cách nào đáng tin cậy để biết đơn đăng ký của bạn có bị giết bởi một quy trình khác hay không. Toàn bộ điểm "giết" một ứng dụng là chấm dứt nó càng sớm càng tốt, mà không để cho nó chạy bất kỳ mã nào.

== Không thực sự sử dụng các đề xuất sau trong ứng dụng sản xuất. Chúng ở đây hoàn toàn là giải pháp kỹ thuật tiềm năng, nhưng nói chung không phải là một ý tưởng tốt cho các ứng dụng chạy trên thiết bị người dùng cuối. ==

Có thể sử dụng IBinder.linkToDeath() từ ứng dụng phụ, hoạt động như màn hình cho ứng dụng chính của bạn. Tuy nhiên, bạn cũng sẽ phải thuyết phục người dùng cài đặt ứng dụng thứ cấp. Nếu bạn có thể làm điều đó, bạn có thể thiết lập giám sát hai phía giữa hai ứng dụng, và có một trong số chúng khởi động lại nếu ứng dụng thứ hai bị giết.

Bạn cũng có thể cố gắng đặt báo thức qua số AlarmManager kích hoạt thường xuyên như vậy, để khởi động lại ứng dụng của bạn nếu ứng dụng đó bị giết. Tuy nhiên, nếu thời gian báo thức của bạn quá lớn, bạn có nguy cơ có khoảng thời gian nhất định mà ứng dụng của bạn không chạy. Và nếu khoảng thời gian của bạn quá nhỏ, rất có thể ứng dụng của bạn sẽ không được Google cho phép trong Cửa hàng Google Play và phân tích ứng dụng phần mềm độc hại trên điện thoại (JB +) có thể khởi động. Ngoài ra, báo động đá quá thường xuyên sẽ tiếp tục thiết bị được đánh thức và xả pin rất nhanh.

+0

Bạn có thể cho tôi biết làm thế nào tôi có thể IBinder.linkToDeath() .. –

+0

Bạn khai báo một dịch vụ trong một trong các ứng dụng. Mặt khác, bạn gọi 'bindService()', để có được một trình khách 'IBinder' cho dịch vụ đó. Bạn không cần phải thực hiện giao diện của riêng bạn trên nó, vì mục đích duy nhất của bạn là phát hiện quá trình chết. Khi bạn nhận được 'IBinder' trong ứng dụng thứ hai, bạn gọi' bindToDeath() 'với một thể hiện của một lớp thực hiện' IBinder.DeathRecipient'. Nếu quá trình ứng dụng đầu tiên bị chết, thì 'binderDied()' của cá thể đó sẽ được gọi, đó là một dấu hiệu cho ứng dụng thứ hai mà ứng dụng đầu tiên đã chết. –

+0

Nếu bạn cần tắt ứng dụng đầu tiên, bạn sẽ phải tìm ra một cơ chế phức tạp hơn để thông báo cho ứng dụng thứ hai để nó có thể phát hành 'IBinder' mà nó giữ, hoặc nó sẽ giữ ứng dụng đầu tiên còn sống miễn là ứng dụng thứ hai còn sống. –

1

Nếu bạn giết một số quá trình, bạn chỉ cần giết nó, vì vậy nó ngừng hoạt động ngay lập tức. Không có sự kiện nào được gửi đến ứng dụng.

1

Tôi đã tìm kiếm điều tương tự và câu trả lời tôi tìm thấy là: KHÔNG, ứng dụng không chuyển đến OnDestroy() hoặc bất kỳ thứ gì tương tự.

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