2011-07-03 8 views
2

서비스를 시작하는 활동이 있습니다. 내 서비스에서활동이 '사망'하면 서비스가 중단됩니다.

startService(new Intent(this, MyService.class)); 

, ONSTART() :

내 활동에

서비스는 몇 가지 작업을 3 ~ 4 분 않는 타이머를 가지고

/* Show notification */ 
int icon = R.drawable.icon; 
tickerText = getResources().getString(R.string.app_name); 
long when = System.currentTimeMillis(); 
contentTitle = getResources().getString(R.string.app_name); 
contentText = getResources().getString(R.string.running); 

Intent notificationIntent = new Intent(this, activityClass).setAction(Intent.ACTION_MAIN).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0); 
notification = new Notification(icon, tickerText, when); 
notification.setLatestEventInfo(this, contentTitle, contentText, contentIntent); 

notification.flags = Notification.FLAG_ONGOING_EVENT; 

((NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE)).notify(0, notification); 

startForeground(0, notification); 

과에 방송 정보를 가능한 경우 활동. 활동이 종료되면 서비스는 계속 업무를 수행해야합니다.

앱을 실행하고 홈 화면으로 돌아 가면 서비스가 계속 실행됩니다. 그러나 잠시 후 나는이 로그 캣 메시지를 얻을하고 서비스를 중지 : 55 :

07-03 (16) 09.440 : INFO/ActivityManager (583) : 프로세스 com.myapp (PID 11665)이 사망했다. 07-03 16 : 55 : 09.440 : WARN/ActivityManager (583) : 나는이 문제를 방지하려면 어떻게

5000ms에서 추락 서비스 com.myapp/.MyService의 일정을 다시 시작?

+0

좋아요, 그리고 어떻게 프로세스가 죽는 것을 방지 할 수 있습니까? – nhaarman

답변

2

내가 응용 프로그램을 실행하고 홈 화면으로 돌아갑니다 , 서비스가 실행 유지합니다. 그러나 잠시 후에 나는이 logcat 메시지를 얻고 서비스는 멈춘다. 나는 이것을 어떻게 막을 수 있는가?

일반적으로 말하지 않습니다.

서비스가 영원히 실행되도록 설계되지 않았습니다. 너무 많은 개발자가 서비스를 시작했으며 결코 중단하지 않았습니다. 그리고, 귀하의 경우, 그들은 정당한 이유없이 그렇게합니다. 시계 틱 (tick)을 보는 것만으로도 메모리에 서비스가 멈추는 것은 낭비입니다. 개발자가 너무 오래 머물러서 안드로이드가 서비스를 "망가뜨린"이런 일을하기 때문에 특히 그렇습니다.

IntentService과 함께 AlarmManager을 사용하도록 전환하십시오. 더 이상 수행 할 작업이 없으면 서비스가 자체적으로 종료됩니다.

+0

나는 AlarmManager를 사용하려고했지만 가능하면 분석을 사용하기 때문에 해결 방법을 선호했습니다. 이들은 문맥에 따라 시작되고 닫히기 때문에 동일해야합니다. 서비스를 종료하면 컨텍스트가 손실되고 분석 인스턴스를 닫을 수 없습니다. 아니면 다른 방법이 있습니까? (나는 그런데 Flurry를 사용하고있다). – nhaarman

+0

@Niek : "아니면 다른 방법이 있나요?" - 사용 데이터를 직접 추적하십시오. 또는 서비스와 함께 작동하도록 설계된 다른 분석 패키지로 전환 할 수 있습니다. – CommonsWare

1

서비스를 실행하는 과정을 Remote Service으로보고 싶기 때문에 자체 프로세스에서 실행됩니다. 원격 서비스에 대한

블로그 : 샘플 하나의 http://saigeethamn.blogspot.com/2009/09/android-developer-tutorial-part-9.html

예 : http://about-android.blogspot.com/2010/02/android-remote-service-sample.html

+0

감사합니다. 나는 그것을 시도 할 것입니다. – nhaarman

+0

이것은 활동이 주변에있을 때 앱이 RAM을 두 번 차지한다는 것을 의미합니다. 낭비하는 앱을 사용하고 악화시킵니다. – CommonsWare

+0

@CommonsWare - Activity가 항상 실행될 필요는 없지만, 응용 프로그램이 작동해야하고 Activity가 종료되어 중지되면 관계없이 어떤 해결책을 찾아야합니다. –

7

제공된 답변이 도움이되지 않았습니다. 하지만이 작업을 수행 할 수있는 정말 쉬운 방법을 발견, 그냥 순간에 테스트

http://developer.android.com/guide/topics/manifest/service-element.html

<service android:name="..." android:process=":remote" /> 
매니페스트

에 추가 내 작업은 이미 살해,하지만 내 서비스가 실행되고 있습니다.

관련 문제