2012-11-23 6 views
4

항상 TCP 소켓을 통해 연결해야하는 응용 프로그램을 만들고 있습니다. 내 응용 프로그램은 이미 연결 측면에서 잘 작동하지만 백그라운드로 전송되면 안드로이드 시스템이 결국 프로세스를 종료합니다. 이로 인해 서버에서 연결이 끊어집니다.백그라운드에서 앱을 계속 실행하려면 어떻게해야합니까?

나는 항상 응용 프로그램을 유지하는 방법을 찾고 있었지만 아무것도 발견하지 못했습니다. 누군가 내게 응용 프로그램이 백그라운드에서 닫히지 않도록 최선의 방법을 말해 줄 수 있습니까? 아니면이 기능을 사용하지 않으면 응용 프로그램이 닫히면 다시 시작하게 할 수 있습니까? 나는 이것으로 시작하고 나에게 두통을 생산 : S

편집 이 내 코드의 일부입니다

public int onStartCommand(Intent intent, int flags, int startId) { 

     Toast.makeText(this, "service starting", Toast.LENGTH_SHORT).show(); 

     new Thread(new Runnable() { 
      public void run() { 
       Playit();    } 
     }).start(); 


    return START_STICKY; 
    } 

앱을하지만, 시작에 고정 될 것으로 보인다. 나는 많은 경험이 없기 때문에 실수는 간단하고 나는 눈치 채지 못했다.

답변

3

서비스를 사용하고 startService()을 통해 시작하십시오. 안드로이드 서비스에 자원

에 대한 일부 문서를 멈출 때까지 실행됩니다 :

  1. http://developer.android.com/reference/android/app/Service.html
  2. http://developer.android.com/guide/components/services.html
+1

지연에 대해 사과드립니다. 서비스를 읽는 중이었습니다.하지만 앱을 종료하면 서비스가 중지되고 앱을 닫으면 서비스가 계속 실행되며 앱을 다시 열 때 서비스가 계속 작동하는지 확인한 후 다시 시작하십시오. 내 질문에 어리 석음이 있지만 신인인데도 여전히 많은 것을 이해하지 못합니다. u.u – robertDraven

+0

'startService'를 통해 서비스를 시작하면 활동을 중지해도 서비스가 중단되지 않습니다. – RvdK

+0

그래서 앱이 종료 된 경우 서비스가 실행 중인지 확인할 수 있기 때문에 앱을 다시 열 수 있습니까? StartService (intent)로 시작하면 서비스의 객체와 통신 할 수 있습니까? – robertDraven

0

유저 (A) Service. 서비스는 서버와의 연결에서 데이터를 송수신하는 것과 같이 백그라운드에서 장기 실행 작업을 수행하는 데 사용됩니다.

0

Android의 Service 클래스를 살펴보십시오. 하지만 Service은 별도의 스레드가 아니며 응용 프로그램 스레드의 일부일 뿐이며 작성 및 삭제 측면에서 OS에 따라 다르게 처리됩니다.

여분의 스레드가 필요한 경우 물론 Service에 스레드를 만들 수 있습니다.

0

OS의 본질은 그 자체로 제한된 메모리 자원으로 인해 백그라운드 프로세스를 죽이기로되어 있습니다. 아마 당신은 체크 아웃해야합니다 Watchdog 어떤 종류의 백그라운드 프로세스 관리자. 나는 안드로이드 시스템에 익숙하지 않지만 이것이 나의 연구에서 찾을 수있는 것이다. 도움이 :)

어쩌면이 당신을 도울 것입니다 희망 :

http://lifehacker.com/5608163/watchdog-monitors-your-android-for-run+away-processes

0

다른 사람이 말했듯이, 당신은 질문에 바로 대답은 서비스로 살아 연결을 유지하는 스레드를 개최하는 것입니다.

그러나 리소스가 제한되어있는 환경에서 백그라운드에서 영구 연결 (tcp 프로토콜의 오버 헤드로 인해)을하면 배터리가 소모되고 사용자가 분노 할 수 있음을 기억하고 싶습니다.

연결을 영속적으로 또는 제한된 시간 동안 유지하려는 경우 또는 gcm 메시지에 의해 트리거 될 수있는 이벤트가 있거나 폴링을 위해 갈 수있는 경우 inexact alarm을 사용하십시오.

또 다른 옵션은 응용 프로그램이 포 그라운드에있을 때만 연결을 설정하는 것입니다. 어쨌든, 그것은 확실히 당신이 당신의 응용 프로그램으로 무엇을하고 싶은지에 달려 있습니다.

+0

조금 설명해 드리겠습니다. 내 응용 프로그램은 보안상의 이유로 연결되어야합니다. 왜냐하면 목적은 공급 업체를 "모니터링"하기 위해서입니다. 그들이 필요할 때 그들이 어디에 있는지를 아십시오. 그들이 길을 나선 때를 아십시오. 그래서 나는 항상 우리 서버에 연결되어 있어야합니다. 연결이 끊어지면 자신의 위치를 ​​얻을 수 없거나 일부 데이터가 내 앱을 컴파일 할 수 없습니다. – robertDraven

관련 문제