포그라운드 서비스가 앱 종료 시 같이 종료되는 현상 질문입니다.
조회수 1217회
안녕하세요. 포그라운드 서비스를 이용한 앱을 스토어에 등록하였습니다.
해당 서비스가 있어야 앱이 제대로 동작하는 방식인데 리뷰를 살펴보니 일부 유저들이 서비스가 동작하지 않는 것 같습니다. 상황 설명을 하자면,
- MainActivity로 진입 시, 포그라운드 서비스 실행 유무 체크 후 실행이 되어 있지 않은 경우 서비스 실행.
- 앱 종료를 해도 서비스는 그대로 남아 있고 서비스 내에서 각종 감지나 DB 처리 등의 역할 수행.
- 핸드폰 재부팅을 할 경우 브로드캐스트 리시버를 통하여 서비스 자동으로 실행해줌.
하지만 이슈가 발생한 사람들의 의견을 정리하면,
- 처음 며칠 간은 앱을 종료하여도 포그라운드 서비스가 실행되고 있음을 알리는 노티바가 남아 있는 것을 확인하였음.
- 그러나 이후에는 앱을 나갈 경우 노티바도 같이 사라지고 앱에 진입하여 화면에 표시가 되어 있을 경우에만 노티바가 생성됨.
- 재부팅을 해도 노티바가 생성되지 않음.
제가 알아본 바로는 서비스의 경우 메인 스레드에서 작동을 시키는데 어떠한 이유로 인하여 메인 스레드에 이상이 생겨 그런거 같은데... 자세한 이유를 모르겠습니다. 평상시에는 잘 작동이 되는데 어느 때에 문제가 발생하는지 모르기 때문에 원인 파악이나 디버깅도 쉽지가 않네요...
// 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
댓글 입력