안드로이드 서비스 실행

조회수 2870회

안녕하세요. 핸드폰 <-> 핸드폰 원격으로 가능한 CCTV 앱을 webRTC를 이용하여 제작하였습니다.

이 CCTV앱을 백그라운드 단에서 항상 실행시키고싶습니다.

일단 지금 은 MainActivity가 activity 인데.

service 클래스에서 이런식으로 하여, 백그라운드 단에서 activity 를 실행하려했으나 안되었습니다.

activity 를 항상 실행시키는방법은 없는건가요?

A핸드폰에서 B핸드폰 ID가지고 CCTV 연결하는 앱이라, B핸드폰에 앱이 켜있지않아도 A가원하면 항상 연결할 수 있도록 하고싶어서, service를 생각했는데 막혀버리네요. 도와주시면감사하겠습니다.

 Context context =getApplicationContext();
 Intent intent = new Intent(context, MainActivity.class);
 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
 context.startActivity(intent);

1 답변

  • 서비스에서 액티비티를 실행시키려 했으나 실행되지 않는다고 하셨는데요. 우선 이 시점에 서비스가 살아있는데 액티비티가 실행되지 않는 것인지 아니면 서비스가 중단됐기 때문에 발생하는 현상인지 확인이 필요합니다. 개인적 경험에 의하면 후자일 가능성이 커보입니다.

    서비스는 시스템에 의해서 중단될 수 있습니다. (구글 문서 글 인용)

    Android 시스템이 서비스를 강제 중단시키는 것은 메모리가 부족하여 사용자가 초점을 집중하고 있는 액티비티를 위해 시스템 리소스를 회복해야만 하는 경우로만 국한됩니다. 해당 서비스가 사용자의 주목을 끌고 있는 액티비티에 바인딩되어 있다면 중단될 가능성이 낮고, 서비스가 전경에서 실행된다고 선언된 경우(나중에 자세히 논함), 거의 절대 중단되지 않습니다. 그렇지 않으면, 서비스가 시작되었고 오랫동안 실행되는 경우 시간이 지나면서 시스템이 배경 작업 목록에서의 이 서비스의 위치를 점점 낮추고 서비스는 중단되기 매우 쉬워집니다.

    그리고 시스템이 서비스를 중지시켰을 때, onStartCommand() 함수 반환값에 의해 서비스를 재시작할지를 판단합니다. 아래 코드와 같이 START_STICKY를 반환하는지 확인해보세요.

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Toast.makeText(this, "service starting", Toast.LENGTH_SHORT).show();
    
        ...
    
        // If we get killed, after returning from here, restart
        return START_STICKY;
    }
    

    마지막으로 아래 링크의 전경에서 서비스 실행하기를 읽어보신후 적용해보시기 바랍니다.

    메모리 부족 시, 전경 상태의 액티비티보다 배경 상태의(백그라운드로 내려간) 액티비티가 시스템에 의해 종료 될 가능성이 큽니다. 서비스도 같은 규칙이 적용되기 때문에 전경에서 서비스를 실행할 경우, 중단되는 상황을 사전에 방지할 수 있습니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자

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

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

(ಠ_ಠ)
(ಠ‿ಠ)