본문 바로가기
안드로이드

[Android] 자동 어플 재시작 만들기

by 코딩히어로 2023. 3. 30.
728x90

1


어플을 개발해서 상용화하다 보면 개발단계에서는 발생하지 않은 수많은 문제들이 발생합니다

어떠한 경우에는 CPU 점유율 문제 또 다른 경우에는 메모리 부족 등 다양한 이유로 실행되는 어플이

종료되는 문제가 발생하는데 기존 어플과 같이 사용할 때에만 실행되는 어플이면 상관없으나

키오스크같이 상시로 켜져있어야 하는 어플의 경우에는 아주 큰 문제가 됩니다

 

이번 포스팅에서는 이러한 상시 어플을 만들었을 때 여러 가지 문제사항으로 어플이 종료되면

시스템을 통해 자동으로 부팅하는 기능을 만들어보겠습니다

 

먼저 코드는 간단한게 별도의 라이브러리를 사용하지 않고 Intent와 PendingIntent를 사용하여 구현합니다

어플이 상시로 동작할 MainActivity의 onCreate단에 다음과 같이 작성합니다

public class MyActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
            @Override
            public void uncaughtException(Thread thread, Throwable ex) {
                Intent intent = new Intent(getApplicationContext(), MyActivity.class);
                PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), 0, intent, PendingIntent.FLAG_ONE_SHOT);

                AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
                alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, 1000, pendingIntent);

                System.exit(2);
            }
        });
    }
}

위 코드를 보면 Intent를 통해 어플이 종료됐을 시 실행할 Activity를 지정하고

PendingIntent를 통해 시스템에 문제가 발생할 경우 Intent를 실행하도록 지정합니다

 

개발자는 모든 상황에 대해 try catch를 사용하여 에러에 대응하지만 예상하지 못한 에러로

어플이 종료되는 경우 해당 Thread가 호출되고 1초 뒤에 어플을 재실행하게 됩니다

 

하지만 주의해야 할 점은 이 기능을 사용할 시 앱이 정상적으로 종료되었을 때에도 앱이 자동으로

시작될 수가 있기 때문에 맨 처음 말씀드린것처럼 키오스크와 같이 상시적으로 동작하는

시스템 환경에서 해당 코드를 넣어주면 어플이 동작이 안돼서 생기는 문제만큼은 보완할 수 있습니다

728x90
반응형

댓글