2つのappアプリケーションの起動を傍受することによって、広告ページが起動されるたびに効果を実現する.
4727 ワード
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の中で傍受を行い、第1の方式は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 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番目のインタフェースで、1回のbackボタンはデスクトップの1つの効果に戻ります).
案内ページについては、案内ページの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のライフサイクルを再開しないことである.
【微信公衆番号】創造は容易ではありません.支持に感謝します.もっと多くのニュースは公衆番号:浅瀬の魚に注目してください.