제목 : 굳이 제목을 붙이자면...

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();
        }

    }
}


만들게된 배경 :

작업관리자로 강제 종료시키면, 알람매니저도 kill되므로

더이상 실행되지 않습니다.

저의 앱은 악성코드 처럼 고객에게 실망을 주는 앱은 아니고,

메신저앱인데... 사용자가 얼마든지 스스로, 앱을 종료할 수 있게 되어져 있습니다.

이 기능을 굳이 넣게된 이유는...

메시저에서 정보를 확인하고, 잠시 다른 앱들을 실행해 보게되면, 

언제 죽었는지? 나의 메신저앱이 kill되는 현상때문에 만들게 되었습니다.

^.~