通过两种监听app应用启动的方式,实现引导页每次启动的效果

匿名 (未验证) 提交于 2019-12-03 00:38:01
  1. 这种方式在application里面进行监听,根据FrameWork提供的监听来来判断启动的activity的数量来进行判断。
 registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {             @Override             public void onActivityCreated(Activity activity, Bundle savedInstanceState) {              }              @Override             public void onActivityStarted(Activity activity) {                 mFinalCount++;                 //如果mFinalCount ==1,说明是从后台到前台                 Log.e("onActivityStarted", mFinalCount +"");                 if (mFinalCount == 1){                     //说明从后台回到了前台                     Intent intent = new Intent(getApplicationContext(), StartActivity.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);                     startActivity(intent);                 }             }              @Override             public void onActivityResumed(Activity activity) {              }              @Override             public void onActivityPaused(Activity activity) {              }              @Override             public void onActivityStopped(Activity activity) {                 mFinalCount--;                 //如果mFinalCount ==0,说明是前台到后台                 Log.i("onActivityStopped", mFinalCount +"");                 if (mFinalCount == 0){                     //说明从前台回到了后台                 }             }              @Override             public void onActivitySaveInstanceState(Activity activity, Bundle outState) {              }              @Override             public void onActivityDestroyed(Activity activity) {              }         });

2.在BaseActivity的里面进行监听,第种方式是通过activity全部继承,对于自身生命周期监听的方式来进行判断。

public class BaseActivity extends Activity{     public static boolean isActive; //全局变量     @Override     protected void onResume() {         Log.d("dukang", "Base onResume: ");         if (!isActive) {             //app 从后台唤醒,进入前台             isActive = true;             Log.i("ACTIVITY", "程序从后台唤醒"); //            startActivity(new Intent(this,StartActivity.class));         }         super.onResume();     }      @Override     protected void onStart() {         super.onStart();     }      @Override     protected void onPause() {         super.onPause();     }      @Override     protected void onStop() {         Log.d("DK", "onStop: 程序进入后台"+System.currentTimeMillis());         if (!isAppOnForeground()) {             //app 进入后台             isActive = false;//记录当前已经进入后台             Log.d("DK", "程序进入后台"+System.currentTimeMillis());         }         super.onStop();     }      @Override     protected void onDestroy() {         super.onDestroy();     }      /**      * APP是否处于前台唤醒状态      *      * @return      */     public boolean isAppOnForeground() {         ActivityManager activityManager = (ActivityManager) getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE);         String packageName = getApplicationContext().getPackageName();         List<ActivityManager.RunningAppProcessInfo> appProcesses = activityManager                 .getRunningAppProcesses();         if (appProcesses == null)             return false;          for (ActivityManager.RunningAppProcessInfo appProcess : appProcesses) {             // The name of the process that this object is associated with.             if (appProcess.processName.equals(packageName)                     && appProcess.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {                 return true;             }         }          return false;     } } 

3.通过这2个方式可以完成一个常见的广告功能,使用常景:每次启动app都会跳出一个引导页面,然后显示之前的退出的页面的实现效果,具体看效果。


(流程是首先第一次启动app,进入引导页,然后过2秒进入主界面,点击跳转到第2个界面,再点击跳转到第3个界面;这个时候按HOME键退到桌面,再启动app,先进入到引导页,过2秒显示的是第3个界面,一次back键返回到桌面的一个效果)。

对于引导页,在引导页面的onCreate()方法里让它自杀。

public class StartActivity extends BaseActivity {      @Override     protected void onCreate(@Nullable Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_start);          new Handler().postDelayed(new Runnable() {             @Override             public void run() {                 finish();             }         },2500);     } } 

4.==温馨提示==:这里需要注意的是:第一种方式需要在AndoridManifest中为每个activity设置 android:configChanges=”orientation|keyboard|screenSize”,让他们不去重启activity,第二种方式不用设置也不会影响效果,不过还是建议添加(毕竟还是会去判断,影响性能麽),差别是该方法是通过对当前app包名的判断是否处在前台,所以不会重走activity的生命周期。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!