美文网首页
根据Activity生命周期判断APP在前台还是在后台

根据Activity生命周期判断APP在前台还是在后台

作者: guardm | 来源:发表于2020-05-22 14:49 被阅读0次

QAPM 源码
ackage com.tencent.qapmsdk;

import android.app.Activity;

import android.app.Application;

import android.content.Context;

import android.os.Bundle;

import android.os.Handler;

import android.support.annotation.NonNull;

import com.tencent.qapmsdk.battery.BatteryStatsImpl;

import com.tencent.qapmsdk.common.DeviceInfo;

import com.tencent.qapmsdk.common.ILogUtil;

import com.tencent.qapmsdk.common.PhoneUtil;

import com.tencent.qapmsdk.common.ThreadManager;

import com.tencent.qapmsdk.config.Config;

import com.tencent.qapmsdk.dropframe.DropResultObject;

import com.tencent.qapmsdk.sample.DumpSampleFileRunnable;

import java.lang.ref.WeakReference;

import java.text.DecimalFormat;

import java.util.HashMap;

class SDKLifecycleCallback implements Application.ActivityLifecycleCallbacks {

  static WeakReference<Activity> sWeakActivity;

  static String sActivityName = "";

  private int foregroundCount = 0;

  private int bufferCount = 0;

  @NonNull

  private String TAG = "QAPM_SDKLifecycleCallback";

  private long last_time = 0L;

  private long cur_time = 0L;

  public void onActivityCreated(Activity activity, Bundle savedInstanceState) {}

  public void onActivityDestroyed(Activity activity) {}

  public void onActivityPaused(Activity activity) {}

  public void onActivityResumed(Activity activity) {

    sWeakActivity = new WeakReference<>(activity);

    sActivityName = new String(((Activity)sWeakActivity.get()).getClass().getSimpleName());

  }

  public void onActivitySaveInstanceState(Activity activity, Bundle outState) {}

  public void onActivityStarted(Activity activity) {

    if (this.foregroundCount <= 0)

      BatteryStatsImpl.getInstance().onAppForeground();

    if (this.bufferCount < 0) {

      this.bufferCount++;

    } else {

      this.foregroundCount++;

    }

  }

  public void onActivityStopped(@NonNull Activity activity) {

    if (activity.isChangingConfigurations()) {

      this.bufferCount--;

    } else {

      this.foregroundCount--;

      if (this.foregroundCount <= 0) {

        Magnifier.ILOGUTIL.i(new String[] { this.TAG, "App back ground" });

        BatteryStatsImpl.getInstance().onAppBackground();

        DeviceInfo.setContext(activity.getApplicationContext());

        Handler handler = new Handler(ThreadManager.getReporterThreadLooper());

        handler.post(new Runnable() {

              public void run() {

                DeviceInfo.reportDevice();

              }

            });

        Handler h = new Handler(ThreadManager.getMonitorThreadLooper());

        DumpSampleFileRunnable dumpSampleFileRunnable = DumpSampleFileRunnable.getInstance();

        dumpSampleFileRunnable.setCanReport(true);

        h.post((Runnable)dumpSampleFileRunnable);

        if (ILogUtil.debug && (Config.STARTED_FUNC & 0x80) > 0) {

          this.cur_time = System.currentTimeMillis();

          h.post(new Runnable() {

                public void run() {

                  HashMap<String, DropResultObject> dropFrame = Magnifier.dbHandler.getDropFrame(PhoneUtil.getProcessName((Context)Magnifier.sApp), Magnifier.productId, Magnifier.info.version, SDKLifecycleCallback.this.last_time, SDKLifecycleCallback.this.cur_time);

                  for (String scene : dropFrame.keySet()) {

                    DropResultObject value = dropFrame.get(scene);

                    double silkyTime = 16.7D * value.dropIntervals[0] + 25.049999999999997D * value.dropIntervals[1] + 50.099999999999994D * value.dropIntervals[2] + 100.19999999999999D * value.dropIntervals[3];

                    double dropFrameRate = silkyTime / value.duration * 1000000.0D * 100.0D;

                    Magnifier.ILOGUTIL.d(new String[] { SDKLifecycleCallback.access$200(this.this$0), "scene:" + scene + " smooth rate:" + String.valueOf((new DecimalFormat("0.00")).format(dropFrameRate)) + "%" });

                  }

                  SDKLifecycleCallback.this.last_time = SDKLifecycleCallback.this.cur_time;

                }

              });

        }

      }

    }

  }

}

相关文章

网友评论

      本文标题:根据Activity生命周期判断APP在前台还是在后台

      本文链接:https://www.haomeiwen.com/subject/xamqahtx.html