출처 : http://www.kmshack.kr/249

mainActivity.java

 

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);     
     
        intentMyService = new Intent(this,PersistentService.class);        // 죽지않는 좀비 서비스
        receiver = new RestartService();                                                    // 리시버 등록
       
  try{
   IntentFilter mainFilter = new IntentFilter("com.jongbum.ServiceTest.ssss");      // xml에서 정의해도 됨
   registerReceiver(receiver, mainFilter);                                               // 리시버 저장

   startService(intentMyService);                                                           // 서비스 시작 
  }
  catch (Exception e) {
   Log.d("RestartService",e.getMessage()+"");
  }
}
   
 @Override
 protected void onDestroy() {
  unregisterReceiver(receiver);                                                               //리시버 삭제(?) 안하면 에러!!
  super.onDestroy();
 }

 

PersistentService.java

 

public class PersistentService extends Service {
 
 @Override
 public void onCreate() {
  Log.d("PersistentService","onCreate");
  unregisterRestartAlarm();                                                 //이미 등록된 알람이 있으면 제거
  super.onCreate();
 }
 
 @Override
 public void onDestroy() {
  Log.d("PersistentService","onDestroy");
  registerRestartAlarm();                                                   // 서비스가 죽을때 알람을 등록
  super.onDestroy();

 }

 

 // support persistent of Service
 public void registerRestartAlarm() {
  Log.d("PersistentService", "registerRestartAlarm");
     Intent intent = new Intent(PersistentService.this, RestartService.class);
     intent.setAction("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);
  }

  public void unregisterRestartAlarm() {
     Log.d("PersistentService", "unregisterRestartAlarm");
     Intent intent = new Intent(PersistentService.this, RestartService.class);
     intent.setAction("ACTION.RESTART.PersistentService");
     PendingIntent sender = PendingIntent.getBroadcast(PersistentService.this, 0, intent, 0);
     AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
     am.cancel(sender);
   }

 

 @Override
 public IBinder onBind(Intent intent) {
  Log.d("RestartService", "onBindonBindonBindonBindonBindonBindonBind");
  return null;
 }
 
}

 

RestartService .java

 

public class RestartService extends BroadcastReceiver {
   

   @Override
   public void onReceive(Context context, Intent intent) {
    Log.d("RestartService", "RestartService called! :" + intent.getAction());

   

    /* 서비스 죽일때 알람으로 다시 서비스 등록 */

     if(intent.getAction().equals("ACTION.RESTART.PersistentService")){
     Log.d("RestartService", "ACTION_RESTART_PERSISTENTSERVICE");
     Intent i = new Intent(context,PersistentService.class);
     context.startService(i);
    } 

    /* 폰 재부팅할때 서비스 등록 */
    if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
     Log.d("RestartService", "ACTION_BOOT_COMPLETED");
     Intent i = new Intent(context,PersistentService.class);
     context.startService(i);
    }
   }
}

 

 

Manifest.xml

  




+ Recent posts