Có cách nào để buộc một ứng dụng vẫn chạy trong nền không có vấn đề gì?


12

Trên Ice Cream Sandwich (ICS), HĐH sẽ phân loại ứng dụng của bạn và mỗi danh mục có ngưỡng riêng mà HĐH sử dụng để xác định ứng dụng nào sẽ đóng trước khi hết bộ nhớ.

Có ai trong số các bạn đã bực mình không, nói rằng bạn đã mở đồng hồ bấm giờ để chạy trong nền để đo thời gian trôi qua của một cái gì đó, sau đó bạn mở thêm vài ứng dụng và quay lại hẹn giờ chỉ để thấy nó được đặt lại hoặc đóng? Ý tôi là, nghiêm túc mà nói, nó thực sự rất khó chịu.

Có cách nào để buộc một ứng dụng vẫn chạy trong nền không có vấn đề gì ngay cả khi hệ điều hành hết bộ nhớ?


7
Đó là một dấu hiệu mã xấu của Ứng dụng. Người dùng không bao giờ phải bận tâm với điều này và Android cung cấp phương tiện để Ứng dụng có thể lưu trạng thái của họ và khôi phục lại sau này (kể từ các phiên bản Android đầu tiên). Bạn nên gửi báo cáo lỗi cho nhà phát triển ứng dụng.
Lưu lượng

Câu trả lời:


8

Câu trả lời được chấp nhận hóa ra không chính xác hoặc lỗi thời. Mô-đun "Cài đặt ứng dụng" cho ứng dụng Xposed cho phép bạn chỉ định trên cơ sở từng ứng dụng để giữ cho các ứng dụng không bị giết hoặc giải phóng:

http://repo.xposed.info/module/de.robv.android.xposed.installer

http://repo.xposed.info/module/de.robv.android.xposed.mods.appsinstall

Chăm sóc có trách nhiệm tất nhiên nên được thực hiện khi chơi với các ứng dụng thay đổi hành vi cấp thấp như vậy.


Một lưu ý, điều này đòi hỏi phải root và là cài đặt sửa đổi hệ điều hành Android nặng.
sweisgerber.dev

5

Câu trả lời đơn giản: Không. Android luôn sử dụng ưu tiên OOM (hết bộ nhớ) để giải phóng bộ nhớ không sử dụng. Bạn có thể thay đổi mức độ ưu tiên của ứng dụng (ít nhất là cho đến khi khởi động lại) với một số trình quản lý tác vụ nhưng ngay cả khi bộ nhớ sắp hết, các ứng dụng trong nền bắt đầu bị giết.

Hãy suy nghĩ về kịch bản này: bạn đã tải xuống một ứng dụng được mã hóa kém chạy trên boot, gây ra lỗi tràn bộ đệm và chiếm hết bộ nhớ của bạn. Thông thường, ứng dụng này bị tắt, nhưng nếu nó được thiết lập để mở, nó sẽ chặn điện thoại của bạn một cách hiệu quả cho đến khi khởi động lại, và sau đó bắt đầu lại, v.v.

Một số bộ định thời sử dụng các dịch vụ có mức độ ưu tiên cao để tránh sự cố này, nhưng nếu bạn khởi chạy đủ các ứng dụng hiệu quả, gây mất tài nguyên trong khi bộ hẹn giờ ở chế độ nền, cuối cùng nó sẽ bị giết.


1
Không cần phải như vậy, IMO. Để hệ thống thực hiện theo cách cũ theo mặc định và trong trường hợp người dùng dự định một ứng dụng cụ thể chạy trong nền ngay tại thời điểm cụ thể đó khi có nhu cầu, chỉ cần cung cấp tùy chọn đó. Không cần phải có một danh mục cấp phép khác vì người dùng có quyền "ghim" ứng dụng. Tôi không muốn một ứng dụng vĩnh viễn không thể bị chặn khi ứng dụng chạy. Tôi chỉ muốn một tùy chọn để làm điều này khi có nhu cầu giống như những gì tôi đã mô tả trong câu hỏi của mình.
supertonsky

1
@onik một lỗi tràn bộ đệm không liên quan gì đến bộ nhớ. Bạn có biết tràn bộ đệm là gì không?

3
@onik vì vậy câu trả lời là không, bạn không biết tràn bộ đệm là gì. Hiểu rồi.

1
@onik cũng là một vòng lặp vô hạn trong danh sách được liên kết chắc chắn có thể đưa bạn vào một OOM từ lâu trước khi bạn lặp lại Integer.MAX_VALUEthời gian. Tại sao bạn nghĩ rằng mọi thứ bị hạn chế bởi Integer.MAX_VALUEanyway?

1
@onik đúng: theo định nghĩa, tràn bộ đệm không thể mở rộng kích thước bộ nhớ được phân bổ. Nếu nó mở rộng kích thước bộ nhớ được phân bổ, nó không phải là tràn bộ đệm. Bạn đang nghĩ về một vòng lặp vô hạn, tôi nghĩ vậy.
Vịt Mooing

1

Tuy nhiên, có hai phương pháp để giảm bớt vấn đề xuất hiện nhưng cả hai chỉ có thể được nhà phát triển triển khai: Cách thứ nhất là hiển thị thông báo, Android sẽ ưu tiên ứng dụng này ưu tiên cao hơn các ứng dụng khác. Cách thứ hai là để tiết kiệm thời gian bắt đầu để khi bộ định thời cuối cùng được khởi động lại, nó sẽ không được đặt lại.


1
Chạy Ứng dụng mà không có lý do với mức độ ưu tiên của Tiền cảnh (đó là lý do cần thông báo) được coi là thông lệ xấu. Như đã nói trước đây: Android cung cấp một Api đẹp, thậm chí cho phép bộ đếm thời gian / bộ đếm không bị ảnh hưởng bởi kẻ giết người OOM. Có một bài viết hay của Dianne Hackborn về chủ đề này
Flow

Tôi không nghi ngờ rằng có một API như vậy, nhưng câu hỏi này đã được đề cập ở đâu trước đây?
Erik

1
Ngoài ra, rõ ràng có một lý do để giữ cho ứng dụng chạy nếu có thể trong trường hợp này, không giống như ví dụ trò chơi bạn đã đăng.
Erik

4
Không có lý do để giữ cho một ứng dụng chạy chỉ vì một bộ đếm thời gian. Chỉ cần sử dụng onSaveInstanceStateonRestoreInstanceStateđể bảo vệ trạng thái Ứng dụng, bao gồm thông tin hẹn giờ. Không cần phải chạy trong Tiền cảnh. Ngay cả khi đó là một báo động bạn có thể sử dụng AlarmManagerđể đảm bảo rằng nó được thực hiện sau đó. Lý do duy nhất mà Tiền cảnh nên được sử dụng là: 1. Bạn có một số hoạt động tiền cảnh thực tế đang diễn ra, như phát nhạc hoặc hiển thị video. 2. Bạn muốn giữ kết nối dữ liệu mở (ví dụ IMAP IDLE (đẩy)).
Dòng chảy

0

Phương pháp thứ nhất: - Nếu bạn tạo Chủ đề dính trong chương trình, có, bạn có thể buộc chương trình của mình tiếp tục chạy. Tuy nhiên, hãy nhớ người dùng ở chế độ cài đặt nâng cao có thể dừng các ứng dụng chạy nền. Tuy nhiên, nếu bạn viết một chủ đề dính theo cách mà nó bắt đầu tại bất kỳ sự kiện đưa ra nào xảy ra thì điều này có thể đạt được.

Phương pháp thứ 2: NẾU người dùng không phải là root Android và bạn muốn chạy một ứng dụng trên nền thứ. sử dụng tập lệnh SL4 trong nền tạo thành ứng dụng. sử dụng một tập lệnh sẽ giúp bạn kiểm tra lý lịch và các chương trình và viết giao diện người dùng để hiển thị một cái gì đó khác.

Ví dụ: Trong hầu hết các công cụ trò chơi, điều này được xây dựng. Chúng kết nối với máy chủ mặc dù người dùng đã tắt ứng dụng. Lý do công cụ tạo ra nhiều tập lệnh trong điện thoại được kiểm tra một cách rõ ràng tại bất kỳ sự kiện cụ thể nào và TRIGGER được sử dụng để chạy ứng dụng của bạn liên tục trên nền tảng của tiền cảnh.

*** Xin lỗi vì TYPO's .. trình kiểm tra chính tả không khả dụng. Hy vọng bạn đạt được những gì bạn dự định nhận được.


Chào mừng bạn đến với Android Enthusiast, một trang web Hỏi & Đáp cho người dùng cuối Android. Theo như tôi có thể hiểu, 2 phương thức bạn cung cấp chỉ có thể được thực hiện từ phía nhà phát triển, tức là những người có mã nguồn của ứng dụng. Thật không may, điều đó có thể không hữu ích cho hầu hết độc giả ở đây vì họ không phát triển ứng dụng. Nếu điều này có thể áp dụng cho người không phải là nhà phát triển, hãy xem xét chỉnh sửa câu trả lời để làm rõ về cách thực hiện những điều này mà không cần chạm vào mã nguồn của ứng dụng . Cảm ơn.
Andrew T.

-1

Đôi khi có một tùy chọn để khóa ứng dụng. Điều này ngăn chặn việc giết hoặc dừng ứng dụng đó trong điện thoại.

Tùy chọn khóa không có sẵn trong hệ điều hành, sử dụng một số ứng dụng của bên thứ 3 như Trình quản lý tác vụ GO , v.v., có thể giúp ích.


2
Việc giết OOM được thực hiện bởi kernel và không có ứng dụng nào có thể ngăn chặn nó hoặc "khóa" một tiến trình. Ứng dụng bạn đã liên kết đến là một trình diệt nhiệm vụ tự giết chết các ứng dụng. Tính năng khóa mà bạn đang đề cập sẽ chỉ ngăn chặn việc giết người bởi nhiệm vụ.
Erik
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.