포그라운드 서비스가 앱 종료 시 같이 종료되는 현상 질문입니다.

조회수 1217회

안녕하세요. 포그라운드 서비스를 이용한 앱을 스토어에 등록하였습니다.

해당 서비스가 있어야 앱이 제대로 동작하는 방식인데 리뷰를 살펴보니 일부 유저들이 서비스가 동작하지 않는 것 같습니다. 상황 설명을 하자면,

  1. MainActivity로 진입 시, 포그라운드 서비스 실행 유무 체크 후 실행이 되어 있지 않은 경우 서비스 실행.
  2. 앱 종료를 해도 서비스는 그대로 남아 있고 서비스 내에서 각종 감지나 DB 처리 등의 역할 수행.
  3. 핸드폰 재부팅을 할 경우 브로드캐스트 리시버를 통하여 서비스 자동으로 실행해줌.

하지만 이슈가 발생한 사람들의 의견을 정리하면,

  1. 처음 며칠 간은 앱을 종료하여도 포그라운드 서비스가 실행되고 있음을 알리는 노티바가 남아 있는 것을 확인하였음.
  2. 그러나 이후에는 앱을 나갈 경우 노티바도 같이 사라지고 앱에 진입하여 화면에 표시가 되어 있을 경우에만 노티바가 생성됨.
  3. 재부팅을 해도 노티바가 생성되지 않음.

제가 알아본 바로는 서비스의 경우 메인 스레드에서 작동을 시키는데 어떠한 이유로 인하여 메인 스레드에 이상이 생겨 그런거 같은데... 자세한 이유를 모르겠습니다. 평상시에는 잘 작동이 되는데 어느 때에 문제가 발생하는지 모르기 때문에 원인 파악이나 디버깅도 쉽지가 않네요...

// AndroidManifest.xml
<service
    android:name=".utils.AppRunService"
    android:enabled="true"
    android:process=":remote">
    <intent-filter>
        <action android:name="ACTION.RESTART.PersistentService" />
    </intent-filter>
</service>
// MainActivity.java
if (!isServiceRunningCheck()) {        // 서비스 실행 체크
    // 핸드폰 끄고 재시작해도 서비스 발동되게 하는 브로드캐스트 등록
    service = new RestartService();
    IntentFilter intentFilter = new IntentFilter("com.example.AppRunService");
    registerReceiver(service, intentFilter);
    // 서비스 실행
    Intent intent = new Intent(MainActivity.this, AppRunService.class);
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
        startService(intent);
    } else {
        startForegroundService(intent);
    }
}
// AppRunService.java
public class AppRunService extends Service {
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
    @Override
    public void onCreate() {
        super.onCreate();
    }
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        ...
        return START_STICKY;
    }
    @Override
    public void onDestroy() {
        stopForeground(true);
    }
}

아래의 메시지도 주기적으로 계속 뜨는데 질문과 연관되어 있지 않나 생각해서 올려보았습니다. 답변 부탁드립니다!

I/zygote64: Background concurrent copying GC freed 343132(20MB) AllocSpace objects, 186(3MB) LOS objects, 29% free, 57MB/81MB, paused 837us total 432.498ms

  • AppRunService 에서 startForeground 로 노티피케이션은 어디서 띄워주시고 있으신가요? 김은기 2021.4.1 21:48
  • onStartCommand에서 띄워주고 있습니다 ㅎ SWC 2021.4.2 00:35

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)