앱이 백그라운드에서 계속 실행되도록 강제하는 방법이 있습니까?


12

ICS (Ice Cream Sandwich)에서 OS는 앱을 분류하고 각 범주에는 메모리가 부족할 때 먼저 닫을 앱을 결정하는 데 사용하는 고유 한 임계 값이 있습니다.

누군가가 시간을 측정하기 위해 백그라운드에서 타이머를 열었다 고 말한 적이 있습니다. 애플 몇 개를 더 열어서 타이머가 재설정되거나 닫히는 것을 보았습니다. 진심으로, 그것은 정말 짜증나는 일입니다.

OS에 메모리가 부족하더라도 앱이 백그라운드에서 계속 실행되도록하는 방법이 있습니까?


7
그것은 앱에 의한 나쁜 코드입니다. 사용자는 이것을 귀찮게 할 필요가 없으며 Android는 수단을 통해 앱이 상태를 저장하고 나중에 초기 Android 버전부터 복원 할 수 있도록합니다. 앱 개발자에게 버그 보고서를 보내야합니다.
흐름

답변:


8

수락 된 답변이 잘못되었거나 구식이었습니다. Xposed 앱의 "앱 설정"모듈을 사용하면 앱을 기반으로 지정하여 앱이 종료되거나 해제되지 않도록 할 수 있습니다.

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

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

물론 저수준의 행동을 바꾸는 앱으로 플레이 할 때는 책임감있는주의를 기울여야합니다.


루트가 필요하고 강력한 Android OS 수정을 설치하는 것입니다.
sweisgerber.dev

5

간단한 답변 : 아니요. Android는 항상 사용하지 않는 메모리를 확보하기 위해 우선 OOM (메모리 부족)을 사용합니다. 일부 작업 관리자를 사용하여 앱의 우선 순위를 변경할 수 있지만 (적어도 재부팅 할 때까지) 메모리가 부족한 경우에도 백그라운드의 앱이 종료되기 시작합니다.

이 시나리오에 대해 생각해보십시오. 부팅시 실행되고 버퍼 오버플로가 발생하여 모든 메모리가 소모되는 잘못 코딩 된 앱을 다운로드했습니다. 일반적 으로이 응용 프로그램은 종료되지만 열려 있도록 설정된 경우 재부팅 할 때까지 그리고 그 후에 다시 시작될 때까지 휴대 전화를 효과적으로 차단합니다.

일부 타이머는이 문제를 피하기 위해 우선 순위가 높은 서비스를 사용하지만 타이머가 백그라운드에있는 동안 충분한 리소스를 사용하는 응용 프로그램을 충분히 실행하면 결국 종료됩니다.


1
그렇게 될 필요는 없습니다, IMO. 시스템이 기본적으로 이전 방식을 수행하도록하고 사용자가 특정 앱이 필요할 때 특정 시점에 백그라운드에서 실행되도록하려면 해당 옵션 만 제공하십시오. 앱을 "고정"하기 위해 사용자의 재량이므로 다른 권한 범주가 필요하지 않습니다. 앱이 일단 실행되면 영구적으로 막을 수 있기를 원하지 않습니다. 내 질문에 설명 된 것과 같은 것이 필요할 때이 옵션을 원합니다.
supertonsky

1
@onik 버퍼 오버플로는 메모리 호깅과 관련이 없습니다. 버퍼 오버 플로우가 무엇인지 아십니까?

3
@onik 그래서 대답은 아니오, 당신은 버퍼 오버플로가 무엇인지 모른다. 알았다.

1
@onik은 또한 연결된 목록의 무한 루프가 Integer.MAX_VALUE시간을 반복하기 훨씬 전에 오랫동안 OOM을 실행할 수 있습니다 . Integer.MAX_VALUE어쨌든 왜 일이 제한적이라고 생각 합니까?

1
@onik 올바름 : 정의에 따르면 버퍼 오버플로는 할당 된 메모리 크기를 확장 할 수 없습니다. 할당 된 메모리 크기를 확장하면 버퍼 오버플로가 아닙니다. 당신은 무한 루프를 생각하고 있습니다.
Mooing Duck

1

그러나 문제를 완화시키는 두 가지 방법이 떠오를 수 있지만 두 가지 방법 모두 개발자 만 구현할 수 있습니다. 첫 번째 방법은 알림을 표시하는 것입니다. 첫 번째 방법은 알림을 표시하는 것입니다. 두 번째는 시작 시간을 저장하여 타이머가 다시 시작되면 재설정되지 않습니다.


1
Foreground 우선 순위가있는 이유없이 (알림이 필요한 이유) 앱을 실행하는 것은 나쁜 습관으로 간주됩니다. 앞에서도 말했듯이 : Android는 OOM 킬러의 영향을받지 않는 타이머 / 카운터도 허용하는 멋진 Api를 제공합니다. Dianne Hackborn의이 주제에 관한 멋진 게시물이 있습니다
Flow

나는 그러한 API가 있다는 것을 의심하지 않지만이 질문에서 이전에 언급 된 곳은 무엇입니까?
Erik

1
또한 게시 한 게임 예제와 달리이 경우에 가능한 경우 앱을 계속 실행 해야하는 이유가 있습니다.
Erik

4
타이머 때문에 앱을 계속 실행할 이유가 없습니다. 타이머 정보를 포함하여 앱 상태를 사용 onSaveInstanceState하고 onRestoreInstanceState안전하게 보호하십시오. Foreground에서 실행할 필요가 없습니다. 알람 AlarmManager이더라도 나중에 실행되도록하는 데 사용할 수 있습니다 . Foreground를 사용해야하는 유일한 이유는 다음과 같습니다. 1. 음악 재생 또는 비디오 표시와 같은 실제 포 그라운드 활동이 진행 중입니다. 2. 데이터 연결을 열린 상태로 유지하려고합니다 (예 : IMAP IDLE (푸시)).
흐름

0

첫 번째 방법 :-프로그램에서 Sticky Thread를 만들면 프로그램을 강제로 실행할 수 있습니다. 그러나 고급 설정 모드의 사용자는 백그라운드 실행 앱을 중지 할 수 있습니다. 그러나 주어진 이벤트 발생시 시작하는 방식으로 고정 스레드를 작성하면 이것이 달성 될 수 있습니다.

두 번째 방법 : 사용자가 루팅되지 않은 안드로이드이고 백그라운드에서 앱을 실행하려는 경우. 앱에서 백그라운드로 SL4 스크립트를 사용하십시오. 백그라운드 검사 및 프로그램을 수행하고 프런트 엔드를 작성하여 다른 것을 보여주는 스크립트를 사용하십시오.

예 : 대부분의 게임 엔진에 내장되어 있습니다. 사용자가 앱을 끈 경우에도 서버에 연결됩니다. 엔진이 전화에서 여러 스크립트를 생성하는 이유는 특정 이벤트에서 엄밀히 확인되고 TRIGGER는 포 그라운드 배경에서 앱을 계속 실행하는 데 사용됩니다.

*** TYPO의 맞춤법 검사기를 사용할 수 없습니다. 당신이 원하는 것을 달성하기를 바랍니다.


Android 최종 사용자를위한 Q & A 사이트 인 Android Enthusiast에 오신 것을 환영합니다. 내가 이해할 수있는 한, 당신이 제공 한 두 가지 방법은 개발자 측, 즉 앱의 소스 코드를 가진 방법에서만 수행 할 수 있습니다. 안타깝게도 앱을 개발하지 않기 때문에 대부분의 독자에게는 도움이되지 않을 수 있습니다. 경우 이 아닌 개발자 적용 할 수있다, 고려 편집 이에 명확하게 답을 보내고 응용 프로그램의 소스 코드를 건드리지 않고 이러한 작업을 수행하는 방법 . 감사.
Andrew T.

-1

때때로 앱 을 잠그는 옵션 이 있습니다. 이 방지는 사망 또는 정지 전화에서 해당 응용 프로그램의.

GO 작업 관리자 등과 같은 일부 타사 앱을 사용하면 OS 자체에서 잠금 옵션을 사용할 수 없습니다 .


2
OOM killing은 커널에 의해 수행되며 어떤 앱도이를 막거나 프로세스를 "잠글"수 없습니다. 연결 한 앱은 앱 자체를 죽이는 작업 킬러입니다. 언급 한 잠금 기능은 작업 킬러에 의한 킬만 방지합니다.
Erik
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.