APM之Android應用的啟動次數(2)

來源:互聯網
上載者:User

標籤:

怎麼防止sdk反覆啟動呢?---->一次啟動對於應用來說算一次啟動次數

  private static boolean started = false;

  public void start(Context context)  //sdk初始化執行的邏輯  {    if (started) {         //用一個變數防止重複初始化.      log.debug("NewRelic is already running.");      return;    }    try {      AgentLogManager.setAgentLog(new NullAgentLog());      log.setLevel(this.logLevel);      if (isInstrumented()) {                               //如果使能成功才改變started的值.        AndroidAgentImpl.init(context, agentConfiguration);        started = true;      } else {        log.error("Failed to detect New Relic instrumentation.  Something likely went wrong during your build process and you should contact [email protected]");        return;      }    } catch (Throwable e) {      log.error("Error occurred while starting the New Relic agent!", e);    }  } 
  private boolean isInstrumented()    {    return false;   //是不是感覺很奇怪?為什麼直接返回false?那麼sdk怎麼改變started的值?  }

雖然在sdk中 isInstrumented()返回的是false,但是編譯成功以後這個值就變成true了(表明rewriter在使用者apk中嵌碼的流程已經生效了,而不僅僅是添加了agent的jar包版本, 這個過程俗稱使能.)

為了防止sdk反覆初始化.要求上面的初始化方法必須嵌入在Activity的onCreate()方法中. 如果嵌在非同步線程中可能會出現多次初始化.

 

注意點:

1.初始化代碼不要嵌在Appliation的onCreate()方法中. 有可能出現多進程多次初始化的問題.

2.Asm是通過對java的位元組碼進行操作嵌碼的. 位元組碼中只有類的父類資訊.沒有其父類以上的繼承資訊. 所以如果ActivityA extends BaseActivity; BaseActivity extends Activity.

那麼ActivityA因為其父類BaseActivity無法確認是否是Activity的子類,所以不會被嵌碼. BaseActivity會正常嵌碼. 

幸好JAVA是運行時. ActivityA生命週期的onStart() onStop()調用的時候.其父類BaseActivity的onStart(),onStop()也會正常執行.前面的ApplicationStateMonitor.activityStart()和activityStop()也會正常執行一次.

3.低端版本的Android可能存在按電源鍵鎖屏 不會走Activity生命週期的onStop()方法.------->一個apk minsdkVersion=4的時候出現過.

 

APM之Android應用的啟動次數(2)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.