제목 : 굳이 제목을 붙이자면...
1. 알람매니저로 나의앱을 항시 실행상태로 놓기
2. 나의앱이 백그라운드에서 안드로이드에의해 강제 kill당했는지 확인후 자동실행하기
3. 최대한, 강제 kill 당하지 않게 오래 버티기
필요성 :
1. 나의앱은 = 메신저앱이라 사용자가 수동으로 종료하기 전까지는 살아있어야 함
1. 나의앱 = com.shindalsoo.first.SdsOjtFirstActivity
소스코드 :
public class AlarmReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) { //10초마다 이리로 들어옵니다.
String myAppState="dead";
Intent i = new Intent(context, com.shindalsoo.first.SdsOjtFirstActivity.class);
PendingIntent pi = PendingIntent.getActivity(context, 0, i, PendingIntent.FLAG_ONE_SHOT);
ActivityManager AtvMgr = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> allProcInfo = AtvMgr.getRunningAppProcesses();
for (ActivityManager.RunningAppProcessInfo proc:allProcInfo) {
if (proc.processName.equals("com.shindalsoo.first")) {
switch (proc.importance) {
case RunningAppProcessInfo.IMPORTANCE_FOREGROUND:
myAppState="IMPORTANCE_FOREGROUND";break;
case RunningAppProcessInfo.IMPORTANCE_BACKGROUND:
myAppState="IMPORTANCE_BACKGROUND";break;
case RunningAppProcessInfo.IMPORTANCE_EMPTY:
myAppState="IMPORTANCE_EMPTY";break;
case RunningAppProcessInfo.IMPORTANCE_SERVICE:
myAppState="IMPORTANCE_SERVICE";break;
case RunningAppProcessInfo.IMPORTANCE_VISIBLE:
myAppState="IMPORTANCE_VISIBLE";break;
}
break;
}
}
if (myAppState=="dead") {
try {
pi.send(); //kill된것을 다시 살게합니다.
} catch (CanceledException e) {
e.printStackTrace();
}
} else {
try { //안드로이드에서 자동kill을 최대한 버티게합니다.
context.startService(i);
i.putExtra("action", "process");
} catch (ActivityNotFoundException e) {
e.printStackTrace();
}
}
}
네... 종일 테스트하고 있습니다만,..
처음에는 10초단위로 들어오는 onReceive 에서
1. Toast로 제대로 동작하는지 ? 찍어보기
2. 진동으로 제대로 동작하는지 ? 찍어보기
3. StatusBarNotification으로 제대로 동작하는지 ? 찍어보기
할때는, 말씀하신대로, 배터리 소모가 발생했으나...
그거빼고, 하니.. 별차이는 못느끼겠습니다.
일반적인 방법은 아니군요^^;
일반적으로 백그라운드에서도 동작하게 하기 위해서는 서비스로 올리셔야하구요.
혹시 시스템에 의한(메모리 부족등에 의한) 강제종료 때문에 위와 같이 하시는 거면, 개발자 문서에 나와있는 foreground 서비스로 등록하는 방법을 사용하시면 됩니다.
사실, 잘 몰라서... 또는, 하도 안되서 이렇게라도,,, 돌리고 있어요.
제가 여기에 올린 의도도... 나같이 방법을 못찾은 사람도 있을 것 같구...
또, "죵이"님 처럼, 다른 방법이 있나 알고 싶기도 했어요.
저는, html5+sencha을 폰갭으로 씌워 개발하는 하이브리드앱 개발자라
안드로이드에 대해서는 잘 몰라요.
말씀하신데로, "foreground 서비스"로 검색하고 있는데...
더 자세한 정보 또는, 안되시면 검색키워드라도 알려주실 수 있나요?
도전해 보게요... (참고로, 저는 sencha에 물이 많이 올랐답니다. 나중에 도움드릴 수 있을지도....)
^^
네. 이렇게 고생해서 얻으신 방법을 모두에게 공개해주시고 정말 감사합니다.^^
저도 달퐁이님 처럼 제가 가진 것을 공유하고 그래야되는데 그놈의 귀찮니즘이...
여튼 foreground service는 구글링 하시면 쉽게 검색이 되구요. 제가 주로 참고한 자료는 아래 링크와 같습니다.
http://huewu.blog.me/110085391353?Redirect=Log&from=postView
http://huewu.blog.me/110081427397?Redirect=Log&from=postView
휴우님 블로그고요. 정말 좋은 자료 많으니 다른 글들도 읽어보세요.^^




신달수님 감사합니다. ^^;