android 서비스 상주 메모리에 대한 생각

1995 단어
우리는 항상 자신의 안드로이드 서비스가 시스템에 의해 정리되고 싶지 않다. 이전에 사람들이 가장 자주 사용했던 방법은 JNI에서 서브 프로세스를 꺼내서 서비스 프로세스의 상태를 감시하고 시스템에 의해 죽으면 다시 시작하는 것이다.
나는 각각 android 4.3과android5.0 위에서 LBE의 메모리 정리 기능을 테스트했는데 정리되지 않는 목적에 도달할 수 있는지 살펴보았는데 이 두 버전에서 약간의 차이가 있음을 발견하였다.
먼저 저희 코드를 말씀드리겠습니다. 저희 서비스는 단독 프로세스에서 서비스에서 JNI 코드를 호출한 다음에 fork에서 프로세스를 내보냅니다. 그리고 저희 서비스 프로세스와 fork에서 나온 하위 프로세스를 계속 실행합니다.
정리한 상태.
  • android4.4 위에서 JNI fork에서 나온 프로세스가 살해되지 않았습니다. 살해된 서비스 프로세스를 다시 시작할 수 있습니다
  • android5.0 위에는 아직 유효합니까?메모리 작업을 정리하면 포크가 나오는 프로세스도 죽는 것을 볼 수 있습니다.보아하니 이런 방법은 이미 효력을 상실한 것 같다..

  • 왜 5.0 위에서는 안 되지? 액티브 관리자 서비스, LBE의 메모리 정리에 호출해야 하는killBackground Processes를 살펴보자. 어떤 차이가 있는지 보자.
    5.0 코드
    <code class="hljs avrasm has-numbering">                Process<span class="hljs-preprocessor">.killProcessQuiet</span>(app<span class="hljs-preprocessor">.pid</span>)<span class="hljs-comment">;</span>
                    Process<span class="hljs-preprocessor">.killProcessGroup</span>(app<span class="hljs-preprocessor">.info</span><span class="hljs-preprocessor">.uid</span>, app<span class="hljs-preprocessor">.pid</span>)<span class="hljs-comment">;</span></code><ul style="display: block;" class="pre-numbering"><li>1</li><li>2</li></ul>

    4.3 코드
    <code class="hljs avrasm has-numbering">                 Process<span class="hljs-preprocessor">.killProcessQuiet</span>(pid)<span class="hljs-comment">;</span></code><ul style="display: block;" class="pre-numbering"><li>1</li></ul>

    5.0 코드에 killprocessgroup이 추가되었습니다...
    보아하니 fork 프로세스의 방식으로android 서비스가 메모리에 상주하도록 하는 방식은 5.0에서 쓸모가 없을 것 같다.

    좋은 웹페이지 즐겨찾기