Android将后台应用唤起到前台的方法 (SDK 4.0, ActivityLifecycleCallbacks)

  对于4.0以上的机型也是采用通过Application注册ActivityLifecycleCallbacks接口,对于4.0以下的机型我们会尝试反射ActivityThread中的mInstrumentation对象。在前台执行跳转广告等。
App registerActivityLifecycleCallbacks(API 14)-Android- https://blog.csdn.net/ShareUs/article/details/79109520
Android将后台应用唤起到前台的方法- http://blog.csdn.net/peidonghui/article/details/49682159

-- 在Android应用中,有一种场景是点击通知栏,唤起应用,此场景有如下几种情况:
1 应用在前台,点击通知,直接执行跳转操作;
2 应用在后台,将后台进程唤起到前台,执行跳转操作;
3 应用没有启动,启动应用,执行跳转操作;
4 应用在后台被回收,恢复应用,然执行跳转操作。

-- 目前以下几种方式能够实现上述效果:
  1 通过设置Intent的flag,代码如下:
Intent intent = new Intent(this, MainActivity.class);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.setAction(Intent.ACTION_MAIN);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
具体的细节还需要在确定,但是存在的一个问题是没有办法通过Intent传递参数;
  2 通过ActivityManager获取RunningTasks,如果存在该应用对应的task,则通过
ActivityManager的moveTaskToFront(rti.id, ActivityManager.MOVE_TASK_WITH_HOME);方法将应用唤起到前台,
然后处理相关操作;如果没有相关的task,则直接启动应用即可;
此方法存在的问题是,如果结合Notification使用时,用户点击Notification的时机是不确定的,只能通过广播处理,会比较麻烦;
  3 将应用中的MainActivity设置为singleTask,这样点击通知时,如果Activity存在,则会将应用唤起到前台,如果不存在则会创建
新的Activity,此方法存在的问题是,从Notification跳转,会直接显示MainActivity,跳过launch页,另外,如果MainActivity设置为singleTask之后,再次跳转到MainActivity,那么MainActivity之上已经存在的Activity会被清空,这样用户的操作行为会丢失。
每种方式都存在各自的优缺点,需要根据实际需求选取。
//锁屏广播
public  class SreenBroadcastReceiver extends BroadcastReceiver {  
        @Override  
        public void onReceive(Context context, Intent intent) {  
            String action = intent.getAction();  
            Log.d("KeepAppAlive","SreenLockReceiver-->监听到系统广播:"+action);  
            if(mStateReceiverListener == null){  
                return;  
            }  
            if(Intent.ACTION_SCREEN_ON.equals(action)){         // 开屏  
                mStateReceiverListener.onSreenOn();  
            }else if(Intent.ACTION_SCREEN_OFF.equals(action)){  // 锁屏  
                mStateReceiverListener.onSreenOff();  
            }else if(Intent.ACTION_USER_PRESENT.equals(action)){ // 解锁  
                mStateReceiverListener.onUserPresent();  
            }  
        }  
    }

你可能感兴趣的:(Android将后台应用唤起到前台的方法 (SDK 4.0, ActivityLifecycleCallbacks))