올해는 머신러닝이다.
절대로 죽지않는 좀비 서비스 만들기 본문
출처 : 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
[출처] 죽여도 죽여도 재부팅해도 항상 떠있는 service 등록하기|작성자 장어구이
'Android > Tip&Tech' 카테고리의 다른 글
Widget 리시버에 다시 리시버 등록하기 (0) | 2013.12.10 |
---|---|
안드로이드] 현재 액티비티, 다른 액티비티 종료하기 (0) | 2013.12.09 |
[펌]Pull To Refresh for Android (0) | 2013.11.25 |
[펌]서로다른 뷰 viewHolder 구현하기 (0) | 2013.11.20 |
[펌]Create a transparent progress dialog on Android (0) | 2013.10.31 |