- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Link
- 재능이의 돈버는 일기
- StresslessLife
- K_JIN2SM
- 소소한 일상
- My Life Style & Memory a Box
- Blog's generation
- 공감 스토리
- 취객의 프로그래밍 연구실
- Love Me
- Dream Archive
- 세상에 발자취를 남기다 by kongmingu
- hanglesoul
- 카마의 IT 초행길
- 느리게.
- 미친듯이 즐겨보자..
- Joo studio
- Gonna be insane
- 악 다 날아갔어!! 갇대밋! 왓더...
- xopowo05
- 맑은공기희망운동
- 엔지니어 독립운동
- 혁준 블로그
- Simple in Complex with Simple
- 무의식이 의식을 지배한다
드럼치는 프로그래머
[안드로이드] 죽지 않는 서비스 만들기 본문
안드로이드는 사정에 따라 서비스를 죽이기도 하며 나중에 다시 살리기도 한다.
RestartService.java
만일 항상 떠있는 서비스를 구현하고자 하는 경우에는 이런 일이 발생하는것에 대해 아주 당황할것이다.
이럴경우 서비스를 죽지 않도록 하고자 할것인데.
이런 경우 알람서비스를 이용하여 서비스가 죽으면 다시 살리는 방법이 있다.
많은 경우 이런 방식을 이용하는것으로 보인다.
PersistentService가 죽지 않아야 할 서비스이다. 아래 예제에서 보면 onCreate시 기존 알람이 있으면 제거하고 onDestroy시 알람을 기동한다.
알람은 일정시간이 지나면 PendingIntent를 날리는 알람이며 이 인텐트를 받을 수 있는 BroadcastReceiver가 있게 된다. 여기서는 RestartService receiver가 해당 인텐트를 받아서 이 때 종료된 PersistentService를 재기동 시키는 역할을 한다.
PersistentService.java
class PersistentService extends Service {
onCreate(..) {
unregisterRestartAlram(); //이미 등록된 알람이 있으면 제거
}
onDestroy(..) {
registerRestartAlram(); // 서비스가 죽을때 알람을 등록
}
// support persistent of Service
void registerRestartAlarm() {
Log.d(TAG, "registerRestartAlarm");
Intent intent = new Intent(PersistentService.this, RestartService.class);
intent.setAction(RestartService. ACTION_RESTART_PERSISTENTSERVICE);
PendingIntent sender = PendingIntent.getBroadcast(PersistentService.this, 0, intent, 0);
long firstTime = SystemClock.elapsedRealtime();
firstTime += 10*1000; // 10초 후에 알람이벤트 발생
AlarmManager am = (AlarmManager)getSystemService( ALARM_SERVICE);
am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP , firstTime, 10*1000, sender);
}
void unregisterRestartAlarm() {
Log.d(TAG, "unregisterRestartAlarm");
Intent intent = new Intent(PersistentService.this, RestartService.class);
intent.setAction(RestartService. ACTION_RESTART_PERSISTENTSERVICE );
PendingIntent sender = PendingIntent.getBroadcast(PersistentService.this, 0, intent, 0);
AlarmManager am = (AlarmManager)getSystemService( ALARM_SERVICE);
am.cancel(sender);
}
}
RestartService.java
public class RestartService extends BroadcastReceiver {
public static final String ACTION_RESTART_PERSISTENTSERVICE = "ACTION.Restart. PersistentService";
@Override
public void onReceive(Context context, Intent intent) {
Log.d("RestartService", "RestartService called!@!@@@@@#$@$@#$@#$@#");
if(intent.getAction().equals(ACTION_RESTART_PERSISTENTSERVICE)) {
Intent i = new Intent(ctx, PushService.class);
context.startService(i);
}
}
manifest.xml
<application android:icon="@drawable/icon" android:label="@string/app_name" >
<receiver android:name="RestartService" android:process=":remote"/>
'★─Programing > ☆─Android' 카테고리의 다른 글
[안드로이드] Notification (안드로이드 알림) (0) | 2013.04.01 |
---|---|
[안드로이드] Remote Service 사용하기 (0) | 2013.04.01 |
[안드로이드] Home Key(홈키) 제어 (0) | 2013.03.29 |
[안드로이드] AIDL에 Parcelable 데이터 사용하기 (0) | 2013.03.26 |
[안드로이드] Service 에서 Activity 를 실행하는 방법 (0) | 2013.03.08 |
Comments